1、CREATE INDEX 句法CREATE UNIQUE INDEX index_name ON tbl_name (col_name(length),. )CREATE INDEX 语句在 MySQL 版本 3.22 以前不做任何事情。在 3.22 或以后版本中,CREATE INDEX 被映射到一个 ALTER TABLE 语句来创建索引。见 7.8 ALTER TABLE 句法。通常,你在用 CREATE TABLE 创建表本身时创建表的所有索引。见 7.7 CREATE TABLE 句法。CREATE INDEX 允许你把索引加到现有表中。 一个(col1,col2,.)形式的列表创造
2、一个多列索引。索引值有给定列的值串联而成。 对于 CHAR 和 VARCHAR 列,索引可以只用一个列的部分来创建,使用col_name(length)句法。(在 BLOB 和 TEXT 列上需要长度) 。下面显示的语句使用 name 列的头 10 个字符创建一个索引: mysql CREATE INDEX part_of_name ON customer (name(10);因为大多数名字通常在头 10 个字符不同,这个索引应该不比从整个 name列的创建的索引慢多少。另外,在索引使用部分的列能使这个索引成为更小的文件大部分, 它能保存很多磁盘空格并且可能也加快 INSERT 操作! 注意,
3、如果你正在使用 MySQL 版本 3.23.2 或更新并且正在使用MyISAM 桌子类型,你只能在可以有 NULL 值的列或一个 BLOB/TEXT 列上增加一个索引,关于 MySQL 如何使用索引的更多信息,见 10.4 MySQL 索引的使用。 DROP INDEX 句法DROP INDEX index_name ON tbl_nameDROP INDEX 从 tbl_name 表抛弃名为 index_name 的索引。DROP INDEX 在 MySQL 3.22 以前的版本中不做任何事情。在 3.22 或以后,DROP INDEX 被映射到一个 ALTER TABLE 语句来抛弃索引。
4、见 7.8 ALTER TABLE句法。注释句法MySQL 服务器支持# to end of line、- to end of line 和/* in-line or multiple-line */注释风格: mysql select 1+1; # This comment continues to the end of linemysql select 1+1; - This comment continues to the end of line mysql select 1 /* this is an in-line comment */ + 1;mysql select 1+/*th
5、is is amultiple-line comment*/1;注意-注释风格要求你在 -以后至少有一个空格! 尽管服务者理解刚才描述的注释句法,mysql 客户分析/* . */注释的方式上有一些限制: 单引号和双引号字符被用来标志一个括起来的字符串的开始,即使在一篇注释内。如果引号在主室内没被第 2 个引号匹配,分析器不知道注释已经结束。如果你正在交互式运行 mysql,你能告知有些混乱,因为提示符从 mysql变为 或“ 。 一个分号被用来指出当前的 SQL 语句结束并且跟随它的任何东西表示下一行的开始。 当你交互式运行 mysql 时和当你把命令放在一个文件中并用 mysql some
6、-file 告诉 mysql 从那个文件读它的输入时,这些限制都适用。MySQL 不支持- 的 ANSI SQL 注释风格。见 5.4.7 -作为一篇注释的开始。 CREATE FUNCTION/DROP FUNCTION 句法CREATE AGGREGATE FUNCTION function_name RETURNS STRING|REAL|INTEGERSONAME shared_library_nameDROP FUNCTION function_name一个用户可定义函数(UDF) 是用一个像 MySQL 的原生(内置)函数如ABS()和 CONCAT()的新函数来扩展 MySQL
7、的方法。 AGGREGATE 是 MySQL 3.23 的一个新选项。一个 AGGREGATE 函数功能就像一个原生 MySQL GROUP 函数如 SUM 或 COUNT()。 CREATE FUNCTION 在 mysql.func 系统表中保存函数名、类型和共享库名。你必须对 mysql 数据库有 insert 和 delete 权限以创建和抛弃函数。 所有活跃的函数在每次服务器启动时被重新装载,除非你使用-skip-grant-tables 选项启动 mysqld,在这种情况下,UDF 初始化被跳过并且 UDF 是无法获得的。(一个活跃函数是一个已经用 CREATE FUNCTION
8、装载并且没用DROP FUNCTION 删除的函数。) 关于编写用户可定义函数的指令,见 14 为 MySQL 增加新函数。对于UDF 的工作机制,函数必须用 C 或 C+ 编写,你的操作系统必须支持动态装载并且你必须动态编译了 mysqld(不是静态)。 MySQL 对保留词很挑剔吗?一个常见的问题源自于试图使用 MySQL 内置的数据类型或函数名同名的列来创建数据库表,例如 TIMESTAMP 或 GROUP。你允许这样做(例如,ABS是一个允许的列名),但是当使用其名字也是列名的函数时,在一个函数名和“ ( ”之间不允许白空。下列词明确地在 MySQL 中被保留。他们的大多数被 ANSI
9、 SQL92 禁止作为列或表名( 例如,group)。一些被保留因为 MySQL 需要他们并且正在(当前)使用一个 yacc 分析器: action add aggregate all alter after and as asc avg avg_row_length auto_increment between bigint bit binary blob bool both by cascade case char character change check checksum column columns comment constraint create cross current_d
10、ate current_time current_timestamp data database databases date datetime day day_hour day_minute day_second dayofmonth dayofweek dayofyear dec decimal default delayed delay_key_write delete desc describe distinct distinctrow double drop end else escape escaped enclosed enum explain exists fields fil
11、e first float float4 float8 flush foreign from for full function global grant grants group having heap high_priority hour hour_minute hour_second hosts identified ignore in index infile inner insert insert_id int integer interval int1 int2 int3 int4 int8 into if is isam join key keys kill last_inser
12、t_id leading left length like lines limit load local lock logs long longblob longtext low_priority max max_rows match mediumblob mediumtext mediumint middleint min_rows minute minute_second modify month monthname myisam natural numeric no not null on optimize option optionally or order outer outfile
13、 pack_keys partial password precision primary procedure process processlist privileges read real references reload regexp rename replace restrict returns revoke rlike row rows second select set show shutdown smallint soname sql_big_tables sql_big_selects sql_low_priority_updates sql_log_off sql_log_
14、update sql_select_limit sql_small_result sql_big_result sql_warnings straight_join starting status string table tables temporary terminated text then time timestamp tinyblob tinytext tinyint trailing to type use using unique unlock unsigned update usage values varchar variables varying varbinary with write when where year year_month zerofill 下列符号(来自上表) 被 ANSI SQL 禁止但是被 MySQL 允许作为列/表名。这是因为这些名字的一些是很自然的名字并且很多人已经使用了他们。 ACTION BIT DATE ENUM NO TEXT TIME TIMESTAMP