C一些用 Windows 的命令行来操?MySQL 的指令?/p>
摘要
q结 MySQL
->mysql -u username -p
username 是你的帐号名U?/p>
q程q结
->mysql -h hostname -u username -p
hostname ?MySQL L的名U?/p>
昄全部的数据库
SHOW DATABASES;
mysql ?MySQL 用来储存帐号和权限的数据库,不能删除?/p>
选择数据?br />USE database_name;
昄数据库里的资料表
SHOW TABLES;
昄资料表的信息
DESCRIBE table_name;
注销 MySQL 昄?br />\q
SQL 的执行指令可以从文本文g内输入?br />SOURCE file_name
如果没有d MySQL 的显C器Q用Q?br />->mysql -u username -p < file_name
Primary key - 用来识别字段?key?br />Foreign key - 代表q结的资料表。再另一个资料表里的 primary key?/p>
使用 MySQL
建立数据?br />CREATE DATABASE employee;
q会(x)建立一个叫 employee 的数据库?/p>
建立资料?br />CREATE TABLE table_name (table definition) [type=table_type];
完整格式Q?/p>
E序代码:
CREATE [TEMPORARY] TABLE [IF NOT EXISTS] table_name [(create_definition, ...)]
[table_options] [select_statement];
or
CREATE [TEMPORARY] TABLE [IF NOT EXISTS] table_name LIKE old_table_name;
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] (index_col_name,...)
or INDEX [index_name] (index_col_name,...)
or UNIQUE [INDEX] [index_name] (index_col_name,...)
or FULLTEXT [INDEX] [index_name] (index_col_name,...)
or [CONSTRAINT symbol] FOREIGN KEY [index_name] (index_col_name,...)
[reference_definition]
or CHECK (expression)
TEMPORARY 关键词是用来建立暂时的资料表Q当你的q结阶段l束后会(x)自动删除?br />CREATE TEMPORARY TABLE table_name;
IF NOT EXISTS 只有在资料表不存在时才会(x)建立?br />CREATE TABLE IF NOT EXISTS table_name;
LIKE old_table_name ?x)依?old_table_name 的构造来建立新的资料表?br />字段定义 (column definition) 可用的选项Q?br />NOT NULL ?NULL 来定义字D不能包?NULL (NOT NULL) 或可以包?NULL (NULL)?br />默认值是可以包括 NULL?br />DEFAULT 可用来宣告字D늚默认倹{?br />AUTO_INCREMENT ?x)自动生连l的数字。生的数字?x)大于资料表内的最大数倹{?br />每个资料表只能有一?AUTO_INCREMENT 字段。他必须是烦引?br />M PRIMARY KEY 的字D会(x)自动建立索引?br />PRIMARY KEY 可用来宣?PRIMARY KEY 的字Dc?br />REFERENCES 可用来宣告字D| FOREIGN KEYQ只能用?InnoDB 资料表?br />下面的关键词可用来宣告字D늚资料Q?br />PRIMARY KEY 来设定多字段?PRIMARY KEYQ跟着是字D늚名称?br />INDEX ?KEY 是一L(fng)关键词,用来讑֮索引?br />UNIQUE 表示字段是独特的Q一h索引?br />FULLTEXT 可用来徏?FULLTEXT 索引Q可用于 TEXT, CHAR, VARCHAR cd?br />FULLTEXT 只能用在 MyISAM 资料表?br />FOREIGN KEY 可用来宣?FOREIGN KEY?br />下面的选项可以不用Q通常是用在最?jng)_Q?br />AUTO_INCREMENT = #
讑֮开始的 AUTO_INCREMENT 数倹{?br />AVG_ROW_LENGTH = #
可用来估计你要的字段长度?br />CHECKSUM = 1
开启资料表的核对倹{可用来修复损坏的资料表。只能用?MyISAM?br />COMMENT = "字符?
用来输入资料表的Ҏ(gu)?br />MAX_ROWS = #
讑֮资料表允许的字段?(最??br />MIN_ROWS = #
讑֮资料表允许的字段?(最??br />PACK_KEYS = {0 | 1 | DEFAULT}
MySQL 的预设是?x)压~?CHAR, VARCHAR, ?TEXT 的字W串?br />如要关闭?0?br />DELAY_KEY_WRITE = {0 | 1}
延后 key 的更斎ͼ直到关闭数据库。只能用?MyISAM?br />ROW_FORMAT = {default | dynamic | fixed | compress}
用来讑֮字段的储存方式。只能用?MyISAM?br />RAID_TYPE = {1 | STRIPED | RAID0} RAID_CHUNKS = # RAID_CHUNKSIZE = #
RAID 的设定?br />UNION = (table_name, [table_name...])
用于 MERGE 资料表。允怽讑֮ MERGE 使用的资料表?br />INSERT_METHOD = {NO | FIRST | LAST}
用于 MERGE 资料表。设定要插入资料到哪个资料表?br />DATA_DIRECTORY = "l对路径"
储存资料的目录?br />INDEX_DIRECTORY = "l对路径"
储存索引的目录?/p>
字段和数据类?br />数字cd
INT ?FLOAT
范例Qsalary decimal(10, 2) - 宽度 10 ?2 个小数点?br />可以?UNSIGNED ?ZEROFILL 关键词?br />UNSIGNED 只能包括零或整数。ZEROFILL ?x)显C数字前的零数?br />整数和变?br />可以~写?INTQ大是 4 bytes?br />TINYINT ?1 byteQ跟 BIT ?BOOL 相同?br />SMALLINT ?2 bytes?br />MEDIUMINT ?3 bytes?br />BIGINT ?8 bytes?br />FLOAT 是单_֯度的点数?br />DOUBLE 是双_֯度的点敎ͼ?REAL ?DOUBLE PRECISION 相同?br />字符串和文字cd
CHAR 可用来储存固定长度的字符Ԍ如果不设定长度,预设?CHAR(1)?br />最大值是 255 个字W?br />固定长度有时候会(x)?VARCHAR 来的快?br />如果跟着的是 BINARY 关键词,比较字符串的时候必L意大写?br />VARCHAR 可用来储存动态的字符Ԍ如果预先不知道字W串的长度,范围?0 ?255?br />TEXT 可储存较长的字符Ԍ最大到 65535 个字W或 bytes?br />BLOB 代表 binary large objectQ用来储?binary 资料Q最大到 65535 个字W或 bytes。比较字W串旉要注意大写?br />TINYTEXT ?TINYBLOB 可储存小?255 个字W或 bytes 的字W串?br />MEDIUMTEXT ?MEDIUMBLOB 可储存到 16777215 个字W或 bytes 的字W串?br />LONGTEXT ?LONGBLOB 可储存到 4294,967,295 个字W或 bytes 的字W串?br />ENUM 可用来储存自订的倹{?br />范例Qgender enum('m', 'f')
表示储存的直?m ?f。也可储?NULLQ所以可能的直是 m, f, NULL, ?error?br />SET ?ENUM cM不过可以储存其它?ENUM 倹{?br />日期和时间类?br />date 可用来储存日期,?YYYY-MM-DD 昄?br />time 可用来储存时_(d)?HH:MM:SS 昄?br />datetime 包含了日期和旉Q以 YYYY-MM-DD HH:MM:SS 昄?br />timestamp 储存插入字段或改变的旉?br />版本 4.0 之前可以?timestamp(10) 来改变显C的宽度?br />year 可用来储存年份,可以?year(2) ?year(4) 来设定显C格式,预设?year(4)?br />year(2) 代表?1970 ?2069 的年份?/p>
建立索引
M宣告?PRIMARY KEY, KEY, UNIQUE, ?INDEX 的字D都?x)自动徏立烦引?br />要将索引建立到字D는Q?br />CREATE INDEX name ON employee(name);
q会(x)建立一个叫 name 的烦引到 employee 资料表里?name 字段?/p>
删除数据库,资料表,和烦?br />删除整个数据库,包括里面的资料:(x)
DROP DATABASE employee;
可以?employee 的前面加?IF EXISTS?br />删除一个资料表Q?br />DROP TABLE assignment;
完整格式Q?/p>
E序代码:
DROP [TEMPORARY] TABLE [IF EXISTS] table_name [, table_name...]
删除索引Q?br />DROP INDEX index_name ON employee;
改变资料表结?br />如果要改变资料表的结构,建立 name 的烦引在 employee 里面?name 字段Q?br />ALTER TABLE employee;
ADD INDEX name (name);
完整格式Q?/p>
E序代码:
ALTER [IGNORE] TABLE table_name alter_spec [, alter_spec ...]
alter_spec:
ADD [COLUMN] create_definition [FIRST | AFTER col_name]
or ADD [COLUMN] (create_definition, create_definition,...)
or ADD INDEX [index_name] (index_col_name,...)
or ADD PRIMARY KEY (index_col_name,...)
or ADD UNIQUE [index_name] (index_col_name,...)
or ADD FULLTEXT [index_name] (index_col_name,...)
or ADD [CONSTRAINT symbol] FOREIGN KYE [index_name] (index_col_name,...)
[reference_definition]
or ALTER [COLUMN] col_name {SET DEFAULT literal | DROP DEFAULT}
or CHANGE [COLUMN] old_col_name create_definition
[FIRST | AFTER column_name]
or MODIFY [COLUMN] create_definition [FIRST | AFTER col_name]
or DROP [COLUMN] col_name
or DROP PRIMARY KEY
or DROP INDEX index_name
or DISABLE KEYS
or ENABLE KEYS
or RENAME [TO] new_table_name
or ORDER BY col_name
or table_options
因ؓ(f) ALTER 非常有弹性所以有很多的查询子句?br />CHANGE ?MODIFY 相同Q可以让你改变字D늚定义或位|?br />DROP COLUMN ?x)删除资料表里的字段?br />DROP PRIMARY KEY ?DROP INDEX ?x)删除相q的字段索引?br />DISABLE KEYS ?x)告?MySQL 停止更新索引Q只能用?MyISAM?br />ENABLE KEYS ?x)l更新烦引?br />RENAME 可以让你改变资料表的名称?br />ORDER BY ?x)重新排序字Dc?/p>
使用 INSERT
INSERT 可以让你输入字段到资料表里?br />完整格式Q?/p>
E序代码:
INSERT [LOW_PRIORITY | DELAYED] [IGNORE]
[INTO] table_name [(col_name,...)]
VALUES ((expression | DEFAULT),...),(...),...
[ON DUPLICATE KEY UPDATE col_name=expression, ...]
or
INSERT [LOW_PRIORITY | DELAYED] [IGNORE]
[INTO] table_name [(col_name,...)]
SELECT ...
or
INSERT [LOW_PRIORITY | DELAYED] [IGNORE]
[INTO] table_name
SET col_name=(expression | DEFAULT), ...
[ON DUPLICATE KEY UPDATE col_name=expression, ...]
范例Q?/p>
E序代码:
INSERT INTO department VALUES
(42, 'Finance'),
(128, 'Research and Development'),
(NULL, 'Human Resources');
INTO 可以不用?br />INSERT INTO department
SELECT ...
可以从其它的资料表里取得资料Q存?department q个资料表?br />INSERT INTO department
SET name = 'Asset Management';
q会(x)输入一个字D늚资料Q只提供 name 的字Dc其它没有资料的字段?x)?NULL?br />其它查询子句Q?br />LOW PRIORITY ?DELAYED ?x)等其它用户d完资料后再输入资料?br />LOW PRIORITY ?x)阻止要输入资料的用P所以在跑完查询后需要等待一D|间?br />DELAYED 不会(x)L用户Q但是输入资料要{没Z用资料表后才?x)完成?br />范例QINSERT DELAYED INTO ...
IGNORE ?x)忽略输入跟字段?PRIMARY KEY ?UNIQUE 值的冲突所产生的错误讯息?br />DEFAULT ?x)用默认值徏立字Dc?br />范例QINSERT INTO department VALUES(DEFAULT)
ON DUPLICATE KEY UPDATE ?x)解册?PRIMARY KEY ?UNIQUE 的冲H?br />范例Q?br />INSERT INTO warning (employeeID)
VALUES(6651)
ON DUPLICATE KEY UPDATE count = count+1;
使用 REPLACE
使用Ҏ(gu)?INSERT 相同?br />REPLACE 可以解决有冲H的输入。如果有冲突字段?x)被更新?/p>
使用 DELETE
用来删除字段?br />范例QDELETE FROM department;
?x)删?department 里面所有的字段?br />如果要选择哪个字段Q用 WHERE?br />范例QDELETE FROM department WHERE name='Asset Management';
如果有开?--safe-updates ?--i-am-a-dummy 选项可以避免一ơ删除全部的字段?br />所以必选择要删除的字段?br />完整格式Q?/p>
E序代码:
DELETE [LOW_PRIORITY] [QUICK] FROM table_name
[WHERE where_definition]
[ORDER BY ...]
[LIMIT rows]
or
DELETE [LOW_PRIORITY] [QUICK] table_name[.*] [, table_name[.*] ...]
FROM table-references
[WHERE where_definition]
or
DELETE [LOW_PRIORITY] [QUICK]
FROM table_name[.*] [, table_name[.*] ...]
USING table-references
[WHERE where_definition]
后两个格式可以用来删除其它资料表里的字段?br />范例Q?/p>
E序代码:
DELETE employee, employeeSkills
FROM employee, employeeSkills, department
WHERE employee.employeeID = employeeSkills.employeeID
AND employee.departmentID = department.departmentID
AND department.name='Finance';
上面的会(x)删除全部的有?Finance department 里面工作?employeesQ然后删除他们的 employeeSkills?br />FROM 里面的字D不?x)被删除Q他们只是用来搜寅R只有在 employee ?employeeSkills 里面的字D会(x)被删除?br />AND 是包含的条g。employee.employeeID 表示 employee 资料表里?employeeID 字段?br />W三个格式跟W二个差不多Q但是删?FROM 里面的资料表Q用 USING 来表C搜寻的资料表?br />范例Q?/p>
E序代码:
DELETE FROM employee, employeeSkills
USING employee, employeeSkills, department
WHERE employee.employeeID = employeeSkills.employeeID
AND employee.departmentID = department.departmentID
AND department.name='Finance';
跟上面一P不同的表C方法?br />额外的查询子句:(x)
LOW_PRIORITY ?INSERT 里的意思相同?br />QUICK 可用来加?DELETE 的速度?br />ORDER BY 是用来删除字D늚序?br />LIMIT 可用来限制被删除的字D|量?/p>
使用 TRUNCATE
可用来删除全部的字段?br />TRUNCATE TABLE employee;
速度?DELETE q快?/p>
使用 UPDATE
可以用来更新字段?/p>
E序代码:
UPDATE employee
SET job='DBA'
WHERE employeeID='6651';
完整格式Q?/p>
E序代码:
UDPATE [LOW_PRIORITY] [IGNORE] table_name
SET col_name1=expr1 [, col_name2=expr2 ...]
[WHERE where_definition]
[ORDER BY ...]
[LIMIT rows]
or
UPDATE [LOW_PRIORITY] [IGNORE] table_name [, table_name ...]
SET col_name=expr1 [, col_name2=expr2 ...]
[WHERE where_definition]
WHERE 可以用来选择要更新哪个字Dc?br />W二个格式可以用来更新多个资料表?br />LOW_PRIORITY ?IGNORE 跟在 INSERT 里的相同QORDER BY ?LIMIT 跟在 DELETE 的相同?/p>
?LOAD DATA INFILE 上传资料文g
可以让你用档案来输入资料C个资料表?br />数据文g范例Q?/p>
E序代码:
42 Finance
128 Research and Development
NULL Human Resources
NULL Marketing
加蝲资料文gQ?/p>
E序代码:
LOAD DATA LOCAL INFILE 'department_infile.txt'
INTO TABLE department;
LOAD DATA INFILE 需?FILE 的权限?/p>
完整格式Q?/p>
E序代码:
LOAD DATA [LOW_PRIORITY | CONCURRENT] [LOCAL] INFILE 'fileName.txt'
[REPLACE | IGNORE]
INTO TABLE table_name
[FIELDS
[TERMINATED BY '\t']
[[OPTIONALLY] ENCLOSED BY '']
[ESCAPED BY '\\']
]
[LINES TERMINATED BY '\n']
[IGNORE number LINES]
[(col_name, ...)]
额外的查询子句:(x)
LOW_PRIORITY ?INSERT 里的cMQ会(x){用戯取完资料表后在l?br />CONCURRENT 允许其它用户读资料表里的资料?br />LOCAL 表示资料文g在用L(fng)计算机里Q如果不?MySQL ?x)在L内读取资料文件?br />REPLACE ?x)覆盖旧的字D,IGNORE ?x)留旧的字段Q如果有冲突?br />FIELDS ?LINES 可以用来规定资料表的格式Q预讄格式?br />每行一个字D,字段资料?tabs 来分开Q要或不要用单引P和用 \ 来蟩脱字W?br />IGNORE number LINES ?x)忽略档案内行数Qnumber 表示行数?br />最后一个子句可以用来设定只输入资料到某些字Dc?/p>