当前所在位置:珠峰网资料 >> 计算机 >> 计算机等级考试 >> 正文
MySQL的重要語法
发布时间:2011/3/7 10:31:32 来源:城市学习网 编辑:ziteng

    一、帐号与权限
    设定 root 和其他 user 的密码
    mysqladmin -u root password '新密码'
    mysqladmin -u root -p
    Enter password:    此时再输入密码(建议采用)
    use mysql;
    mysql> UPDATE user SET password=password('新密码') where user='root';
    只改 root 的密码,如果没有用 where ,则表示改全部 user 的密码
    mysql> FLUSH PRIVILEGES; 在 mysql 资料库内,一定要用 flush 更新记忆体上的资料
    删除空帐号
    mysql> DELETE FROM user WHERE User = '';
    mysql> FLUSH PRIVILEGES;
    建立新帐号
    mysql> GRANT 权限 ON 资料库或资料表 TO 使用者 IDENTIFIED BY '密码';
    权限
    资料库或资料表
    *.* 所有资料库里的所有资料表
    * 预设资料库里的所有资料表
    资料库。* 某一资料库里的所有资料表
    资料库。资料表 某一资料库里的特定资料表
    资料表  预设资料库里的某一资料表
    设定/修改权限
    用 root 登入 MySQL
    mysqladmin -u root -p
    Enter password:
    mysql> GRANT all ON db35.* TO s35@'localhost' IDENTIFIED BY 's35';
    把 db35 这个资料库(含其下的所有资料表),授权给 s35,从 localhost 上来,密码为s35
    mysql> GRANT all ON *.*  把所有资料库及资料表授权给别人,太危险了!
    mysql> GRANT all??? ON www.* TO '*'@'*' IDENTIFIED BY '';
    把 www 这个资料库(含其下的所有资料表),授权给 任何机器任何人,无密码(通常给不特定人士使用)
    mysql> FLUSH PRIVILEGES;   (最後一定要强迫更新权限)
    二、资料库/资料表/栏位的操作
    建立资料库 CREATE DATABASE 资料库名;
    语法:CREATE DATABASE db_name
    使用资料库 USE 资料库名;
    语法:USE db_name
    删除资料库 DROP DATABASE 资料库名;
    语法:DROP DATABASE [IF EXISTS] db_name
    建立资料表
    CREATE TABLE 资料表名 (栏位1 资料型态, 栏位2 资料型态, ……);
    语法:
    CREATE TABLE [IF NOT EXISTS] tbl_name (create_definition,…) [table_options] [select_statement]
    例:
    craete database basic;
    use basic;
    create table basic(
    no char(4)
    name char(10)
    id char(10));
    create_definition:
    col_name type [NOT NULL | NULL] [DEFAULT default_value] [AUTO_INCREMENT]
    [PRIMARY KEY] [reference_definition]
    or    PRIMARY KEY (index_col_name,…)
    or    KEY [index_name] KEY(index_col_name,…)
    or    INDEX [index_name] (index_col_name,…)
    or    UNIQUE [INDEX] [index_name] (index_col_name,…)
    or    [CONSTRAINT symbol] FOREIGN KEY index_name (index_col_name,…)
    [reference_definition]
    or    CHECK (expr)
    资料结构(type):
    资料型态 说明
    TINYINT 有符号的范围是-128到127, 无符号的范围是0到255。
    SMALLINT 有符号的范围是-32768到32767, 无符号的范围是0到65535。
    MEDIUMINT 有符号的范围是-8388608到8388607, 无符号的范围是0到16777215。
    INT 有符号的范围是-2147483648到2147483647, 无符号的范围是0到4294967295。
    INTEGER INT的同义词。
    BIGINT 有符号的范围是-9223372036854775808到 9223372036854775807,无符号的范围是0到18446744073709551615。
    FLOAT 单精密浮点数字。不能无符号。允许的值是-3.402823466E+38到- 1.175494351E-38,0 和1.175494351E-38到3.402823466E+38。
    DOUBLE 双精密)浮点数字。不能无符号。允许的值是- 1.7976931348623157E+308到-2.2250738585072014E-308、 0和2.2250738585072014E-308到1.7976931348623157E+308。
    DOUBLE PRECISION DOUBLE的同义词。
    REAL DOUBLE的同义词。
    DECIMAL DECIMAL值的最大范围与DOUBLE相 同。
    NUMERIC DECIMAL的同义词。
    DATE 日期。支援的范围是'1000-01-01'到'9999-12-31'。
    DATETIME 日期和时间组合。支援的范围是'1000-01-01 00:00:00'到'9999-12-31 23:59:59'
    TIMESTAMP 时间戳记。范围是'1970-01-01 00:00:00'到2037年的某时。
    TIME 一个时间。范围是'-838:59:59'到'838:59:59'。
    YEAR 2或4位数字格式的年(内定是4位)。允许的值是1901到2155。
    CHAR 固定长度,1 ~ 255个字元。
    VARCHAR 可变长度,1 ~ 255个字元。
    TINYBLOB
    TINYTEXT 最大长度为255(2^8-1)个字符。
    MEDIUMBLOB
    MEDIUMTEXT 最大长度为16777215(2^24-1)个字符。
    LONGBLOB
    LONGTEXT 最大长度为4294967295(2^32-1)个字符。
    ENUM 一个ENUM最多能有65535不同的值。
    SET 一个SET最多能有64个成员。
    index_col_name:
    col_name [(length)]
    reference_definition:
    REFERENCES tbl_name [(index_col_name,…)]
    [MATCH FULL | MATCH PARTIAL]
    [ON DELETE reference_option]
    [ON UPDATE reference_option]
    reference_option:
    RESTRICT | CASCADE | SET NULL | NO ACTION | SET DEFAULT
    table_options:
    type = [ISAM | MYISAM | HEAP]
    or      max_rows = #
    or      min_rows = #
    or      avg_row_length = #
    or      comment = "string"
    or      auto_increment = #
    select_statement:
    [ | IGNORE | REPLACE] SELECT …  (Some legal select statement)
    删除资料表 DROP TABLE 资料表名; [NextPage]

    语法:DROP TABLE [IF EXISTS] tbl_name [, tbl_name,…]
    改变资料表结构(新增/删除栏位、建立/取消索引、改变栏位资料型态、栏位重新命 名)
    语法:
    ALTER [IGNORE] TABLE tbl_name alter_spec [, alter_spec …]
    alter_specification:
    ADD [COLUMN] create_definition [FIRST | AFTER column_name ]
    or    ADD INDEX [index_name] (index_col_name,…)
    or    ADD PRIMARY KEY (index_col_name,…)
    or    ADD UNIQUE [index_name] (index_col_name,…)
    or    ALTER [COLUMN] col_name {SET DEFAULT literal | DROP DEFAULT}
    or    CHANGE [COLUMN] old_col_name create_definition
    or    MODIFY [COLUMN] create_definition
    or    DROP [COLUMN] col_name
    or    DROP PRIMARY KEY
    or    DROP INDEX key_name
    or    RENAME [AS] new_tbl_name
    or    table_option
    范例:
    栏位重新命名
    mysql> ALTER TABLE t1 CHANGE a b INTEGER;
    将资料表 t1 栏位 a 改名为 b (其资料型态是 integer)
    改变栏位资料型态
    mysql> ALTER TABLE t1 CHANGE b b BIGINT NOT NULL;
    mysql> ALTER TABLE t1 MODIFY b BIGINT NOT NULL;
    将资料表 t1 栏位 b 的资料型态改为 bigint not null
    mysql> CREATE TABLE t1 (a INTEGER,b CHAR(10));
    mysql> ALTER TABLE t1 RENAME t2;
    将资料表 t1 改名为 t2
    mysql> ALTER TABLE t2 MODIFY a TINYINT NOT NULL, CHANGE b c CHAR(20);
    将资料表 t2 栏位 a 资料型态由 integer 改为 tinyint not null ,栏位 b 改名为 c 资料型态改为 char(20)
    mysql> ALTER TABLE t2 ADD d TIMESTAMP;
    在资料表 t2 增加新栏位 d 资料型态是 timestamp
    mysql> ALTER TABLE t2 ADD INDEX (d), ADD PRIMARY KEY (a);
    在资料表 t2 ,对 d 栏位做索引,并以栏位 a 作为主索引键
    mysql> ALTER TABLE t2 DROP COLUMN c;
    删除栏位 c
    mysql> ALTER TABLE t2 ADD c INT UNSIGNED NOT NULL AUTO_INCREMENT, ADD INDEX (c);
    新增栏位 c,并做索引(做索引的栏位必须为 not null )
    资料表最佳化 OPTIMIZE TABLE 资料表名
    语法:OPTIMIZE TABLE tbl_name
    栏位长度有变动、删除大量资料,都应进行资料表最佳化
    三、纪录的操作
    插入一笔或多笔纪录 INSERT INTO 资料表(栏位1,栏位2,……) VALUES(值1,值2,……), (值1,值2,……), ……
    (MySQL 3.22.5 以後可插入多笔记录)
    语法:
    INSERT [LOW_PRIORITY | DELAYED] [IGNORE]
    [INTO] tbl_name [(col_name,…)]
    VALUES (expression,…),(…),…
    or  INSERT [LOW_PRIORITY | DELAYED] [IGNORE]
    [INTO] tbl_name [(col_name,…)]
    SELECT …
    or  INSERT [LOW_PRIORITY | DELAYED] [IGNORE]
    [INTO] tbl_name
    SET col_name=expression, col_name=expression, …
    范例:
    mysql> INSERT INTO tbl_name (col1,col2) VALUES(15,col1*2);
    不可写成
    mysql> INSERT INTO tbl_name (col1,col2) VALUES(col2*2,15);
    因为:栏位 col1 的值先填入後,才可以计算栏位 col2
    从档案读入资料
    语法:
    LOAD DATA [LOCAL] INFILE 'file_name.txt' [REPLACE | IGNORE]
    INTO TABLE tbl_name
    [FIELDS
    [TERMINATED BY '\t']    每一栏位以某字元分开(内定是 tab)
    [OPTIONALLY] ENCLOSED BY "]   每一栏位以某字元括住(内定是不使用括号)
    [ESCAPED BY '\\' ]]
    [LINES TERMINATED BY '\n']  设定换行的字元(内 定是 \n)
    [IGNORE number LINES]    忽略最前面几行(最前面几笔记录不抄进来)
    [(col_name,…)]
    范例:
    mysql> USE db1;
    mysql> LOAD DATA INFILE "./data.txt" INTO TABLE db2.my_table;
    从目前 MySQL 目录读入 data.txt
    mysql> LOAD DATA INFILE "./88.txt" INTO TABLE TEACHER FIELDS TERMINATED BY ' ' ;
    从目前 MySQL 目录(我的在 /var/lib/mysql )读入 data.txt ,每一栏位以 空白 分开
    mysql> LOAD DATA INFILE 'persondata.txt' INTO TABLE persondata (col1,col2,…);
    只将 persondata.txt 里某些栏位的资料抓过来
    删除纪录 DELETE [LOW-PRIORITY] FROM 资料表名 WHERE 条件 [LIMIT rows]
    语法:
    DELETE [LOW_PRIORITY] FROM tbl_name
    [WHERE where_definition] [LIMIT rows]
    LOW-PRIORITY 是等到没有用户端使用时再删
    LIMIT rows 限制删除纪录的笔数
    范例:
    mysql> DELETE FROM 资料表名;
    删除所有纪录
    mysql> DELETE FROM 资料表名 WHERE 1>0;
    删除所有纪录,但速度较慢,方便在萤幕上看
    更新一笔纪录 (语法与 INSERT 相同)
    REPLACE INTO 资料表(栏位1,栏位2,……) VALUES(值1,值2,……)
    语法:
    REPLACE [LOW_PRIORITY | DELAYED]
    [INTO] tbl_name [(col_name,…)]
    VALUES (expression,…)
    or  REPLACE [LOW_PRIORITY | DELAYED]
    [INTO] tbl_name [(col_name,…)]
    SELECT …
    or  REPLACE [LOW_PRIORITY | DELAYED]
    [INTO] tbl_name
    SET col_name=expression, col_name=expression,…
    更新多笔纪录
    语法:
    UPDATE [LOW_PRIORITY] tbl_name SET col_name1=expr1,col_name2=expr2,…     [WHERE where_definition]
    如果没有设定 WHERE 条件,则整个资料表相关的栏位都更新
    范例:
    mysql> UPDATE persondata SET age=age+1;
    将资料表 persondata 中,所有 age 栏位都加 1
    mysql> UPDATE persondata SET age=age*2, age=age+1;
    将资料表 persondata 中,所有 age 栏位都*2,再加 1
    四、资料的输出
    SELECT
    语法:
    SELECT [STRAIGHT_JOIN] [SQL_SMALL_RESULT] [DISTINCT | ALL]
    select_expression,…
    [INTO OUTFILE 'file_name' export_options]
    [FROM table_references
    [WHERE where_definition]
    [GROUP BY col_name,…]
    [HAVING where_definition]
    [ORDER BY {unsigned_integer | col_name} [ASC | DESC] ,…]
    [LIMIT [offset,] rows]
    [PROCEDURE procedure_name] ]
    范例:
    排序输出
    select * from 资料表名 order by 栏位名1,栏位名2,栏位名3……
    反向排序输出
    select * from 资料表名 order by 栏位名1,栏位名2,栏位名3…… desc
    mysql> select concat(last_name,', ',first_name) AS full_name
    from mytable ORDER BY full_name;
    mysql> select t1.name, t2.salary from employee AS t1, info AS t2
    where t1.name = t2.name;
    显示资料库 employee(别名 t1) 里,资料表 t1 的栏位 name 和 资料表 t2 的栏位 salary 当……
    mysql> select t1.name, t2.salary from employee t1, info t2           where t1.name = t2.name;
    mysql> select college, region, seed from tournament
    ORDER BY region, seed;
    mysql> select college, region AS r, seed AS s from tournament
    ORDER BY r, s;
    mysql> select college, region, seed from tournament
    ORDER BY 2, 3;
    mysql> select col_name from tbl_name HAVING col_name > 0;
    mysql> select col_name from tbl_name WHERE col_name > 0;
    mysql> select user,max(salary) from users
    group by user HAVING max(salary)>10;
    mysql> select user,max(salary) AS sum from users
    group by user HAVING sum>10;
    mysql> select * from table LIMIT 5,10;  # Retrieve rows 6-15
    mysql> select * from table LIMIT 5;     # Retrieve first 5 rows
    在命令列下进行批次处理:
    shell> mysql -h host -u user -p < batch-file
    Enter password: ********
    Type Bytes From To
    TINYINT 1 -128 127
    SMALLINT 2 -32768 32767
    MEDIUMINT 3 -8388608 8388607
    INT 4 -2147483648 2147483647
    BIGINT 8 -9223372036854775808 9223372036854775807
    Column type ``Zero'' value
    DATETIME '0000-00-00 00:00:00'
    DATE '0000-00-00'
    TIMESTAMP 00000000000000 (length depends on display size)
    TIME '00:00:00'
    YEAR 0000
    Column type Display format
    TIMESTAMP(14) YYYYMMDDHHMMSS
    TIMESTAMP(12) YYMMDDHHMMSS
    TIMESTAMP(10) YYMMDDHHMM
    TIMESTAMP(8) YYYYMMDD
    TIMESTAMP(6) YYMMDD
    TIMESTAMP(4) YYMM
    TIMESTAMP(2) YY
    Type Max.size Bytes
    TINYTEXT or TINYBLOB 2^8-1 255
    TEXT or BLOB 2^16-1 (64K-1) 65535
    MEDIUMTEXT or MEDIUMBLOB 2^24-1 (16M-1) 16777215
    LONGBLOB 2^32-1 (4G-1) 4294967295
    Value CHAR(4) Storage required VARCHAR(4) Storage required
    '' ' ' 4 bytes '' 1 byte
    'ab' 'ab ' 4 bytes 'ab' 3 bytes
    'abcd' 'abcd' 4 bytes 'abcd' 5 bytes
    'abcdefgh' 'abcd' 4 bytes 'abcd' 5 bytes
    Value Index
    NULL NULL
    "" 0
    "one" 1
    "two" 2
    "three" 3
    Other vendor type MySQL type
    BINARY(NUM) CHAR(NUM) BINARY
    CHAR VARYING(NUM) VARCHAR(NUM)
    FLOAT4 FLOAT
    FLOAT8 DOUBLE
    INT1 TINYINT
    INT2 SMALLINT
    INT3 MEDIUMINT
    INT4 INT
    INT8 BIGINT
    LONG VARBINARY MEDIUMBLOB
    LONG VARCHAR MEDIUMTEXT
    MIDDLEINT MEDIUMINT
    VARBINARY(NUM) VARCHAR(NUM) BINARY
    Column type Storage required
    TINYINT 1 byte
    SMALLINT 2 bytes
    MEDIUMINT 3 bytes
    INT 4 bytes
    INTEGER 4 bytes
    BIGINT 8 bytes
    FLOAT(X) 4 if X <= 24 or 8 if 25 <= X <= 53
    FLOAT 4 bytes
    DOUBLE 8 bytes
    DOUBLE PRECISION 8 bytes
    REAL 8 bytes
    DECIMAL(M,D) M+2 bytes if D > 0, M+1 bytes if D = 0 (D+2, if M < D)
    NUMERIC(M,D) M+2 bytes if D > 0, M+1 bytes if D = 0 (D+2, if M < D)
    Column type Storage required
    DATE 3 bytes
    DATETIME 8 bytes
    TIMESTAMP 4 bytes
    TIME 3 bytes
    YEAR 1 byte
    Column type Storage required
    CHAR(M) M bytes, 1 <= M <= 255
    VARCHAR(M) L+1 bytes, where L <= M and 1 <= M <= 255
    TINYBLOB, TINYTEXT L+1 bytes, where L < 2^8
    BLOB, TEXT L+2 bytes, where L < 2^16
    MEDIUMBLOB, MEDIUMTEXT L+3 bytes, where L < 2^24
    LONGBLOB, LONGTEXT L+4 bytes, where L < 2^32
    ENUM('value1','value2',…) 1 or 2 bytes, depending on the number of enumeration values (65535 values maximum)
    SET('value1','value2',…) 1, 2, 3, 4 or 8 bytes, depending on the number of set members (64 members maximum)

广告合作:400-664-0084 全国热线:400-664-0084
Copyright 2010 - 2017 www.my8848.com 珠峰网 粤ICP备15066211号
珠峰网 版权所有 All Rights Reserved