王朝网络
分享
 
 
 

Windows 的命令行来操作 MySQL 的指令

王朝mysql·作者佚名  2006-04-20
宽屏版  字体: |||超大  

记了一些用 Windows 的命令行来操作 MySQL 的指令。

摘要

连结 MySQL

->mysql -u username -p

username 是你的帐号名称。

远程连结

->mysql -h hostname -u username -p

hostname 是 MySQL 主机的名称。

显示全部的数据库

SHOW DATABASES;

mysql 是 MySQL 用来储存帐号和权限的数据库,不能删除。

选择数据库

USE database_name;

显示数据库里的资料表

SHOW TABLES;

显示资料表的信息

DESCRIBE table_name;

注销 MySQL 显示器

\q

SQL 的执行指令可以从文本文件内输入。

SOURCE file_name

如果没有登入 MySQL 的显示器,用:

->mysql -u username -p < file_name

Primary key - 用来识别字段的 key。

Foreign key - 代表连结的资料表。再另一个资料表里的 primary key。

使用 MySQL

建立数据库

CREATE DATABASE employee;

这会建立一个叫 employee 的数据库。

建立资料表

CREATE TABLE table_name (table definition) [type=table_type];

完整格式:

程序代码:

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 关键词是用来建立暂时的资料表,当你的连结阶段结束后会自动删除。

CREATE TEMPORARY TABLE table_name;

IF NOT EXISTS 只有在资料表不存在时才会建立。

CREATE TABLE IF NOT EXISTS table_name;

LIKE old_table_name 会依照 old_table_name 的构造来建立新的资料表。

字段定义 (column definition) 可用的选项:

NOT NULL 或 NULL 来定义字段不能包括 NULL (NOT NULL) 或可以包括 NULL (NULL)。

默认值是可以包括 NULL。

DEFAULT 可用来宣告字段的默认值。

AUTO_INCREMENT 会自动产生连续的数字。产生的数字会大于资料表内的最大数值。

每个资料表只能有一个 AUTO_INCREMENT 字段。他必须是索引。

任何 PRIMARY KEY 的字段会自动建立索引。

PRIMARY KEY 可用来宣告 PRIMARY KEY 的字段。

REFERENCES 可用来宣告字段是 FOREIGN KEY,只能用在 InnoDB 资料表。

下面的关键词可用来宣告字段的资料:

PRIMARY KEY 来设定多字段的 PRIMARY KEY,跟着是字段的名称。

INDEX 和 KEY 是一样的关键词,用来设定索引。

UNIQUE 表示字段是独特的,一样是索引。

FULLTEXT 可用来建立 FULLTEXT 索引,可用于 TEXT, CHAR, VARCHAR 类型。

FULLTEXT 只能用在 MyISAM 资料表。

FOREIGN KEY 可用来宣告 FOREIGN KEY。

下面的选项可以不用,通常是用在最佳化:

AUTO_INCREMENT = #

设定开始的 AUTO_INCREMENT 数值。

AVG_ROW_LENGTH = #

可用来估计你要的字段长度。

CHECKSUM = 1

开启资料表的核对值。可用来修复损坏的资料表。只能用在 MyISAM。

COMMENT = "字符串"

用来输入资料表的批注。

MAX_ROWS = #

设定资料表允许的字段值 (最大)。

MIN_ROWS = #

设定资料表允许的字段值 (最小)。

PACK_KEYS = {0 | 1 | DEFAULT}

MySQL 的预设是会压缩 CHAR, VARCHAR, 和 TEXT 的字符串。

如要关闭选 0。

DELAY_KEY_WRITE = {0 | 1}

延后 key 的更新,直到关闭数据库。只能用在 MyISAM。

ROW_FORMAT = {default | dynamic | fixed | compress}

用来设定字段的储存方式。只能用在 MyISAM。

RAID_TYPE = {1 | STRIPED | RAID0} RAID_CHUNKS = # RAID_CHUNKSIZE = #

RAID 的设定。

UNION = (table_name, [table_name...])

用于 MERGE 资料表。允许你设定 MERGE 使用的资料表。

INSERT_METHOD = {NO | FIRST | LAST}

用于 MERGE 资料表。设定要插入资料到哪个资料表。

DATA_DIRECTORY = "绝对路径"

储存资料的目录。

INDEX_DIRECTORY = "绝对路径"

储存索引的目录。

字段和数据类型

数字类型

INT 和 FLOAT

范例:salary decimal(10, 2) - 宽度 10 和 2 个小数点。

可以用 UNSIGNED 和 ZEROFILL 关键词。

UNSIGNED 只能包括零或整数。ZEROFILL 会显示数字前的零数。

整数和变化

可以缩写成 INT,大小是 4 bytes。

TINYINT 是 1 byte,跟 BIT 和 BOOL 相同。

SMALLINT 是 2 bytes。

MEDIUMINT 是 3 bytes。

BIGINT 是 8 bytes。

FLOAT 是单精密度的浮点数。

DOUBLE 是双精密度的浮点数,跟 REAL 和 DOUBLE PRECISION 相同。

字符串和文字类型

CHAR 可用来储存固定长度的字符串,如果不设定长度,预设是 CHAR(1)。

最大值是 255 个字符。

固定长度有时候会比 VARCHAR 来的快。

如果跟着的是 BINARY 关键词,比较字符串的时候必须注意大小写。

VARCHAR 可用来储存动态的字符串,如果预先不知道字符串的长度,范围是 0 到 255。

TEXT 可储存较长的字符串,最大到 65535 个字符或 bytes。

BLOB 代表 binary large object,用来储存 binary 资料,最大到 65535 个字符或 bytes。比较字符串时需要注意大小写。

TINYTEXT 或 TINYBLOB 可储存小于 255 个字符或 bytes 的字符串。

MEDIUMTEXT 或 MEDIUMBLOB 可储存到 16777215 个字符或 bytes 的字符串。

LONGTEXT 或 LONGBLOB 可储存到 4294,967,295 个字符或 bytes 的字符串。

ENUM 可用来储存自订的值。

范例:gender enum('m', 'f')

表示储存的直是 m 和 f。也可储存 NULL,所以可能的直是 m, f, NULL, 或 error。

SET 跟 ENUM 类似不过可以储存其它的 ENUM 值。

日期和时间类型

date 可用来储存日期,以 YYYY-MM-DD 显示。

time 可用来储存时间,以 HH:MM:SS 显示。

datetime 包含了日期和时间,以 YYYY-MM-DD HH:MM:SS 显示。

timestamp 储存插入字段或改变的时间。

版本 4.0 之前可以用 timestamp(10) 来改变显示的宽度。

year 可用来储存年份,可以用 year(2) 或 year(4) 来设定显示格式,预设是 year(4)。

year(2) 代表从 1970 到 2069 的年份。

建立索引

任何宣告为 PRIMARY KEY, KEY, UNIQUE, 或 INDEX 的字段都会自动建立索引。

要将索引建立到字段用:

CREATE INDEX name ON employee(name);

这会建立一个叫 name 的索引到 employee 资料表里的 name 字段。

删除数据库,资料表,和索引

删除整个数据库,包括里面的资料:

DROP DATABASE employee;

可以在 employee 的前面加上 IF EXISTS。

删除一个资料表:

DROP TABLE assignment;

完整格式:

程序代码:

DROP [TEMPORARY] TABLE [IF EXISTS] table_name [, table_name...]

删除索引:

DROP INDEX index_name ON employee;

改变资料表结构

如果要改变资料表的结构,建立 name 的索引在 employee 里面的 name 字段:

ALTER TABLE employee;

ADD INDEX name (name);

完整格式:

程序代码:

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

因为 ALTER 非常有弹性所以有很多的查询子句。

CHANGE 和 MODIFY 相同,可以让你改变字段的定义或位置。

DROP COLUMN 会删除资料表里的字段。

DROP PRIMARY KEY 和 DROP INDEX 会删除相连的字段索引。

DISABLE KEYS 会告诉 MySQL 停止更新索引,只能用在 MyISAM。

ENABLE KEYS 会继续更新索引。

RENAME 可以让你改变资料表的名称。

ORDER BY 会重新排序字段。

使用 INSERT

INSERT 可以让你输入字段到资料表里。

完整格式:

程序代码:

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, ...]

范例:

程序代码:

INSERT INTO department VALUES

(42, 'Finance'),

(128, 'Research and Development'),

(NULL, 'Human Resources');

INTO 可以不用。

INSERT INTO department

SELECT ...

可以从其它的资料表里取得资料,存到 department 这个资料表。

INSERT INTO department

SET name = 'Asset Management';

这会输入一个字段的资料,只提供 name 的字段。其它没有资料的字段会是 NULL。

其它查询子句:

LOW PRIORITY 或 DELAYED 会等其它用户读取完资料后再输入资料。

LOW PRIORITY 会阻止要输入资料的用户,所以在跑完查询后需要等待一段时间。

DELAYED 不会阻止用户,但是输入资料要等没人使用资料表后才会完成。

范例:INSERT DELAYED INTO ...

IGNORE 会忽略输入跟字段的 PRIMARY KEY 或 UNIQUE 值的冲突所产生的错误讯息。

DEFAULT 会用默认值建立字段。

范例:INSERT INTO department VALUES(DEFAULT)

ON DUPLICATE KEY UPDATE 会解决跟 PRIMARY KEY 或 UNIQUE 的冲突。

范例:

INSERT INTO warning (employeeID)

VALUES(6651)

ON DUPLICATE KEY UPDATE count = count+1;

使用 REPLACE

使用方法跟 INSERT 相同。

REPLACE 可以解决有冲突的输入。如果有冲突字段会被更新。

使用 DELETE

用来删除字段。

范例:DELETE FROM department;

会删除 department 里面所有的字段。

如果要选择哪个字段,用 WHERE。

范例:DELETE FROM department WHERE name='Asset Management';

如果有开启 --safe-updates 或 --i-am-a-dummy 选项可以避免一次删除全部的字段。

所以必须选择要删除的字段。

完整格式:

程序代码:

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]

后两个格式可以用来删除其它资料表里的字段。

范例:

程序代码:

DELETE employee, employeeSkills

FROM employee, employeeSkills, department

WHERE employee.employeeID = employeeSkills.employeeID

AND employee.departmentID = department.departmentID

AND department.name='Finance';

上面的会删除全部的有在 Finance department 里面工作的 employees,然后删除他们的 employeeSkills。

FROM 里面的字段不会被删除,他们只是用来搜寻。只有在 employee 和 employeeSkills 里面的字段会被删除。

AND 是包含的条件。employee.employeeID 表示 employee 资料表里的 employeeID 字段。

第三个格式跟第二个差不多,但是删除 FROM 里面的资料表,用 USING 来表示被搜寻的资料表。

范例:

程序代码:

DELETE FROM employee, employeeSkills

USING employee, employeeSkills, department

WHERE employee.employeeID = employeeSkills.employeeID

AND employee.departmentID = department.departmentID

AND department.name='Finance';

跟上面一样,不同的表示方法。

额外的查询子句:

LOW_PRIORITY 跟 INSERT 里的意思相同。

QUICK 可用来加快 DELETE 的速度。

ORDER BY 是用来删除字段的顺序。

LIMIT 可用来限制被删除的字段数量。

使用 TRUNCATE

可用来删除全部的字段。

TRUNCATE TABLE employee;

速度比 DELETE 还快。

使用 UPDATE

可以用来更新字段。

程序代码:

UPDATE employee

SET job='DBA'

WHERE employeeID='6651';

完整格式:

程序代码:

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 可以用来选择要更新哪个字段。

第二个格式可以用来更新多个资料表。

LOW_PRIORITY 和 IGNORE 跟在 INSERT 里的相同,ORDER BY 和 LIMIT 跟在 DELETE 的相同。

用 LOAD DATA INFILE 上传资料文件

可以让你用档案来输入资料到一个资料表。

数据文件范例:

程序代码:

42 Finance

128 Research and Development

NULL Human Resources

NULL Marketing

加载资料文件:

程序代码:

LOAD DATA LOCAL INFILE 'department_infile.txt'

INTO TABLE department;

LOAD DATA INFILE 需要 FILE 的权限。

完整格式:

程序代码:

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, ...)]

额外的查询子句:

LOW_PRIORITY 跟 INSERT 里的类似,会等用户读取完资料表后在继续。

CONCURRENT 允许其它用户读资料表里的资料。

LOCAL 表示资料文件在用户的计算机里,如果不用 MySQL 会在主机内读取资料文件。

REPLACE 会覆盖旧的字段,IGNORE 会留旧的字段,如果有冲突。

FIELDS 和 LINES 可以用来规定资料表的格式,预设的格式是

每行一个字段,字段资料用 tabs 来分开,要或不要用单引号,和用 \ 来跳脱字符。

IGNORE number LINES 会忽略档案内行数,number 表示行数。

最后一个子句可以用来设定只输入资料到某些字段。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
>>返回首页<<
推荐阅读
 
 
频道精选
 
静静地坐在废墟上,四周的荒凉一望无际,忽然觉得,凄凉也很美
© 2005- 王朝网络 版权所有