数据库

位置:IT落伍者 >> 数据库 >> 浏览文章

MySQL的重要语法


发布日期:2020年07月28日
 
MySQL的重要语法

帐号与权限

设定 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 db* TO s@localhost IDENTIFIED BY s;

把 db 这个资料库(含其下的所有资料表)授权给 s从 localhost 上来密码为s

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 资料表名 (栏位 资料型态 栏位 资料型态 ……)

语法

CREATE TABLE [IF NOT EXISTS] tbl_name (create_definition…) [table_options] [select_statement]

craete database basic;

use basic;

create table basic(

no char(

name char(

id char())

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 有符号的范围是 无符号的范围是

SMALLINT 有符号的范围是 无符号的范围是

MEDIUMINT 有符号的范围是 无符号的范围是

INT 有符号的范围是 无符号的范围是

INTEGER INT的同义词

BIGINT 有符号的范围是无符号的范围是

FLOAT 单精密浮点数字不能无符号允许的值是E+ EEE+

DOUBLE 双精密)浮点数字不能无符号允许的值是 E+E EE+

DOUBLE PRECISION DOUBLE的同义词

REAL DOUBLE的同义词

DECIMAL DECIMAL值的最大范围与DOUBLE相 同

NUMERIC DECIMAL的同义词

DATE 日期支援的范围是

DATETIME 日期和时间组合支援的范围是 :: ::

TIMESTAMP 时间戳记范围是 ::年的某时

TIME 一个时间范围是::::

YEAR 位数字格式的年(内定是位)允许的值是

CHAR 固定长度个字元

VARCHAR 可变长度个字元

TINYBLOB

TINYTEXT 最大长度为^)个字符

MEDIUMBLOB

MEDIUMTEXT 最大长度为^)个字符

LONGBLOB

LONGTEXT 最大长度为^)个字符

ENUM 一个ENUM最多能有不同的值

SET 一个SET最多能有个成员

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 资料表名

语法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 t CHANGE a b INTEGER;

将资料表 t 栏位 a 改名为 b (其资料型态是 integer)

改变栏位资料型态

mysql> ALTER TABLE t CHANGE b b BIGINT NOT NULL;

mysql> ALTER TABLE t MODIFY b BIGINT NOT NULL;

将资料表 t 栏位 b 的资料型态改为 bigint not null

mysql> CREATE TABLE t (a INTEGERb CHAR())

mysql> ALTER TABLE t RENAME t;

将资料表 t 改名为 t

mysql> ALTER TABLE t MODIFY a TINYINT NOT NULL CHANGE b c CHAR(

将资料表 t 栏位 a 资料型态由 integer 改为 tinyint not null 栏位 b 改名为 c 资料型态改为 char(

mysql> ALTER TABLE t ADD d TIMESTAMP;

在资料表 t 增加新栏位 d 资料型态是 timestamp

mysql> ALTER TABLE t ADD INDEX (d) ADD PRIMARY KEY (a)

在资料表 t 对 d 栏位做索引并以栏位 a 作为主索引键

mysql> ALTER TABLE t DROP COLUMN c;

删除栏位 c

mysql> ALTER TABLE t ADD c INT UNSIGNED NOT NULL AUTO_INCREMENT ADD INDEX (c)

新增栏位 c并做索引(做索引的栏位必须为 not null )

资料表最佳化OPTIMIZE TABLE 资料表名

语法OPTIMIZE TABLE tbl_name

栏位长度有变动删除大量资料都应进行资料表最佳化

纪录的操作

插入一笔或多笔纪录INSERT INTO 资料表(栏位栏位……) VALUES(值……) (值……) ……

(MySQL 以后可插入多笔记录)

语法

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 (colcol) VALUES(col*

不可写成

mysql> INSERT INTO tbl_name (colcol) VALUES(col*

因为栏位 col 的值先填入后才可以计算栏位 col

从档案读入资料

语法

LOAD DATA [LOCAL] INFILE file_nametxt [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 db;

mysql> LOAD DATA INFILE /datatxt INTO TABLE dbmy_table;

从目前 MySQL 目录读入 datatxt

mysql> LOAD DATA INFILE /txt INTO TABLE TEACHER FIELDS TERMINATED BY ;

从目前 MySQL 目录(我的在 /var/lib/mysql )读入 datatxt 每一栏位以 空白 分开

mysql> LOAD DATA INFILE persondatatxt INTO TABLE persondata (colcol…)

只将 persondatatxt 里某些栏位的资料抓过来

删除纪录DELETE [LOWPRIORITY] FROM 资料表名 WHERE 条件 [LIMIT rows]

语法

DELETE [LOW_PRIORITY] FROM tbl_name

[WHERE where_definition] [LIMIT rows]

LOWPRIORITY是等到没有用户端使用时再删

LIMIT rows限制删除纪录的笔数

范例

mysql> DELETE FROM 资料表名

删除所有纪录

mysql> DELETE FROM 资料表名 WHERE >;

删除所有纪录但速度较慢方便在萤幕上看

更新一笔纪录 (语法与 INSERT 相同)

REPLACE INTO 资料表(栏位栏位……) VALUES(值……)

语法

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_name=exprcol_name=expr… [WHERE where_definition]

如果没有设定 WHERE 条件则整个资料表相关的栏位都更新

范例

mysql> UPDATE persondata SET age=age+;

将资料表 persondata 中所有 age 栏位都加

mysql> UPDATE persondata SET age=age* age=age+;

将资料表 persondata 中所有 age 栏位都*再加

资料的输出

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 栏位名栏位名栏位名……

反向排序输出

select * from 资料表名 order by 栏位名栏位名栏位名…… desc

mysql> select concat(last_name first_name) AS full_name

from mytable ORDER BY full_name;

mysql> select tname tsalary from employee AS t info AS t

where tname = tname;

显示资料库 employee(别名 t) 里资料表 t 的栏位 name 和 资料表 t 的栏位 salary 当……

mysql> select tname tsalary from employee t info t where tname = tname;

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 ;

mysql> select col_name from tbl_name HAVING col_name > ;

mysql> select col_name from tbl_name WHERE col_name > ;

mysql> select usermax(salary) from users

group by user HAVING max(salary)>;

mysql> select usermax(salary) AS sum from users

group by user HAVING sum>;

mysql> select * from table LIMIT ; # Retrieve rows

mysql> select * from table LIMIT ; # Retrieve first rows

在命令列下进行批次处理

shell> mysql h host u user p < batchfile

Enter password: ********

Type Bytes From To

TINYINT

SMALLINT

MEDIUMINT

INT

BIGINT

Column type ``Zero value

DATETIME ::

DATE

TIMESTAMP (length depends on display size)

TIME ::

YEAR

Column type Display format

TIMESTAMP() YYYYMMDDHHMMSS

TIMESTAMP() YYMMDDHHMMSS

TIMESTAMP() YYMMDDHHMM

TIMESTAMP() YYYYMMDD

TIMESTAMP() YYMMDD

TIMESTAMP() YYMM

TIMESTAMP() YY

Type Maxsize Bytes

TINYTEXT or TINYBLOB ^

TEXT or BLOB ^K

MEDIUMTEXT or MEDIUMBLOB ^M

LONGBLOB ^G

Value CHAR() Storage required VARCHAR() Storage required

bytes byte

ab ab bytes ab bytes

abcd abcd bytes abcd bytes

abcdefgh abcd bytes abcd bytes

Value Index

NULL NULL

one

two

three

Other vendor type MySQL type

BINARY(NUM) CHAR(NUM) BINARY

CHAR VARYING(NUM) VARCHAR(NUM)

FLOAT FLOAT

FLOAT DOUBLE

INT TINYINT

INT SMALLINT

INT MEDIUMINT

INT INT

INT BIGINT

LONG VARBINARY MEDIUMBLOB

LONG VARCHAR MEDIUMTEXT

MIDDLEINT MEDIUMINT

VARBINARY(NUM) VARCHAR(NUM) BINARY

Column type Storage required

TINYINT byte

SMALLINT bytes

MEDIUMINT bytes

INT bytes

INTEGER bytes

BIGINT bytes

FLOAT(X) if X <= or if <= X <=

FLOAT bytes

DOUBLE bytes

DOUBLE PRECISION bytes

REAL bytes

DECIMAL(MD) M+ bytes if D > M+ bytes if D = (D+ if M < D)

NUMERIC(MD) M+ bytes if D > M+ bytes if D = (D+ if M < D)

Column type Storage required

DATE bytes

DATETIME bytes

TIMESTAMP bytes

TIME bytes

YEAR byte

Column type Storage required

CHAR(M) M bytes <= M <=

VARCHAR(M) L+ bytes where L <= M and <= M <=

TINYBLOB TINYTEXT L+ bytes where L < ^

BLOB TEXT L+ bytes where L < ^

MEDIUMBLOB MEDIUMTEXT L+ bytes where L < ^

LONGBLOB LONGTEXT L+ bytes where L < ^

ENUM(valuevalue…) or bytes depending on the number of enumeration values ( values maximum)

SET(valuevalue…) or bytes depending on the number of set members ( members maximum)

               

上一篇:mysql高效导数据方法

下一篇:MySQL 存取权限系统