一帐号与权限
设定 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+到 E 和E到E+
DOUBLE 双精密)浮点数字不能无符号允许的值是 E+到E 和E到E+
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)