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

本文介绍了如何使用Windows命令行操作MySQL数据库,包括连接数据库、显示数据库列表、创建和删除数据库及表格、插入和更新数据等常见操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

记了一些用 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 表示行数。
最后一个子句可以用来设定只输入资料到某些字段。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值