MySQL语句

登录

1
mysql -u root -p 123 -h localhost
  • -u:后面的root是用户名,这里使用的是超级管理员root
  • -p:后面的123是密码,这是在安装MySQL时就已经指定的密码
  • -h:后面给出的localhost是服务器主机名,它是可以省略的,例如:mysql -u root -p 123

退出

quitexit

查看所有数据库

1
SHOW DATABASES;

切换数据库

1
USE mydb1;

切换到mydb1数据库

创建数据库

1
CREATE DATABASE [IF NOT EXISTS] mydb1

创建数据库,例如:CREATE DATABASE mydb1,创建一个名为mydb1的数据库。如果这个数据已经存在,那么会报错。例如CREATE DATABASE IF NOT EXISTS mydb1,在名为mydb1的数据库不存在时创建该库,这样可以避免报错。

删除数据库

1
DROP DATABASE [IF EXISTS] mydb1;

删除数据库,例如:DROP DATABASE mydb1,删除名为mydb1的数据库。如果这个数据库不存在,那么会报错。DROP DATABASE IF EXISTS mydb1,就算mydb1不存在,也不会的报错。

修改数据库编码

1
ALTER DATABASE mydb1 CHARACTER SET utf8;

修改数据库mydb1的编码为utf8。注意,在MySQL中所有的UTF-8编码都不能使用中间的“-”,即UTF-8要书写为UTF8。

数据类型

常用类型:

  • int:整型

  • double:浮点型,例如double(5,2)表示最多5位,其中必须有2位小数,即最大值为999.99;

  • decimal:泛型型,在表单钱方面使用该类型,因为不会出现精度缺失问题;

  • char:固定长度字符串类型;

  • varchar:可变长度字符串类型;

  • text:字符串类型;

  • blob:字节类型;

  • date:日期类型,格式为:yyyy-MM-dd;

  • time:时间类型,格式为:hh:mm:ss

  • timestamp:时间戳类型;

创建表

1
2
3
4
5
CREATE TABLE 表名(
列名 列类型,
列名 列类型,
......
);

例如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
CREATE TABLE stu(
sid CHAR(6),
sname VARCHAR(20),
age INT,
gender VARCHAR(10)
);


CREATE TABLE emp(
eid CHAR(6),
ename VARCHAR(50),
age INT,
gender VARCHAR(6),
birthday DATE,
hiredate DATE,
salary DECIMAL(7,2),
resume VARCHAR(1000)
);

查看当前数据库中所有表名称

1
SHOW TABLES;

查看指定表的创建语句

1
SHOW CREATE TABLE emp;

查看emp表的创建语句

查看表结构

1
DESC emp;

查看emp表结构

删除表

1
DROP TABLE emp;

删除emp表

修改表

添加列

给stu表添加classname列:

1
ALTER TABLE stu ADD (classname varchar(100));

修改列类型

修改stu表的gender列类型为CHAR(2):

1
ALTER TABLE stu MODIFY gender CHAR(2);

修改列名

修改stu表的gender列名为sex:

1
ALTER TABLE stu change gender sex CHAR(2);

删除列

删除stu表的classname列:

1
ALTER TABLE stu DROP classname;

修改表名称

修改stu表名称为student:

1
ALTER TABLE stu RENAME TO student;

插入数据

INSERT INTO 表名(列名1,列名2, …) VALUES(值1, 值2)

如:

1
2
3
INSERT INTO stu(sid, sname,age,gender) VALUES('s_1001', 'zhangSan', 23, 'male');

INSERT INTO stu(sid, sname) VALUES('s_1001', 'zhangSan');

INSERT INTO 表名 VALUES(值1,值2,…)

因为没有指定要插入的列,表示按创建表时列的顺序插入所有列的值:

1
INSERT INTO stu VALUES('s_1002', 'liSi', 32, 'female');

注意:所有字符串数据必须使用单引用!

修改数据

UPDATE 表名 SET 列名1=值1, … 列名n=值n [WHERE 条件];

1
2
3
4
5
6
7
8
9
UPDATE stu SET sname=’zhangSanSan’, age=’32’, gender=’female’ WHERE sid=’s_1001’;

UPDATE stu SET sname=’liSi’, age=’20’ WHERE age>50 AND gender=’male’;

UPDATE stu SET sname=’wangWu’, age=’30’ WHERE age>60 OR gender=’female’;

UPDATE stu SET gender=’female’ WHERE gender IS NULL;

UPDATE stu SET age=age+1 WHERE sname=’zhaoLiu’;

删除数据

DELETE FROM 表名 [WHERE 条件];

1
2
3
4
5
DELETE FROM stu WHERE sid=’s_1001’003B;

DELETE FROM stu WHERE sname=’chenQi’ OR age > 30;

DELETE FROM stu;

TRUNCATE TABLE 表名;

1
TRUNCATE TABLE stu;

虽然TRUNCATE和DELETE都可以删除表的所有记录,但有原理不同。DELETE的效率没有TRUNCATE高!
TRUNCATE其实属性DDL语句,因为它是先DROP TABLE,再CREATE TABLE。而且TRUNCATE删除的记录是无法回滚的,但DELETE删除的记录是可以回滚的(回滚是事务的知识!)。

创建用户

CREATE USER 用户名@地址 IDENTIFIED BY '密码';

1
2
3
CREATE USER user1@localhost IDENTIFIED BY ‘123’; 

CREATE USER user2@’%’ IDENTIFIED BY ‘123’;

给用户授权

GRANT 权限1, … , 权限n ON 数据库.* TO 用户名;

1
2
3
GRANT CREATE,ALTER,DROP,INSERT,UPDATE,DELETE,SELECT ON mydb1.* TO user1@localhost;

GRANT ALL ON mydb1.* TO user2@localhost;

撤销授权

REVOKE权限1, … , 权限n ON 数据库.* FORM 用户名;

1
REVOKE CREATE,ALTER,DROP ON mydb1.* FROM user1@localhost;

查看用户权限

SHOW GRANTS FOR 用户名;

1
SHOW GRANTS FOR user1@localhost;

删除用户

DROP USER 用户名;

1
DROP USER user1@localhost;

修改用户密码

1
2
3
USE mysql;
UPDATE USER SET PASSWORD=PASSWORD(‘密码’) WHERE User=’用户名’ and Host=’IP’;
FLUSH PRIVILEGES;
1
2
UPDATE USER SET PASSWORD=PASSWORD('1234') WHERE User='user2' and Host=’localhost’;
FLUSH PRIVILEGES;
------ 本文结束 ------