MySQL

[MySQL 之一] SQL 基础

2021-06-22  本文已影响0人  小胡_鸭

(1)SQL 分类

主要分为三个类别:

(2)DDL

  连接 MySQL 服务器

mysql -h 主机地址 -P 端口号 -u 用户名 -p 密码

  主机地址参数不指定时默认为 localhost,端口号默认为 3306

① 创建数据库

CREATE DATABASE dbname;

创建数据库

如果数据库已存在,重复创建会报错

通过以下命令查看系统中存在的所有数据库

show databases

可以看到前面创建的数据库 test1

有几个 mysql 系统数据库:

选择要操作的数据库,使用以下命令:

use dbname

选择刚创建的数据库 test1

查看数据库中的数据表,使用以下命令:

show tables;

查看数据库 test1 中存在哪些数据表

查看系统数据库 mysql 中存在哪些数据表

② 删除数据库

通过以下命令删除数据库:

drop database dbname;

删除数据库 test1

PS. 删除数据库的操作会把库中所有的表和数据都删除,所以要谨慎操作,必要做好数据备份。

③ 创建表

创建一张数据表的语法如下:

CREATE TABLE tablename (
    column_name_1 column_type_1 constraints,
    column_name_2 column_type_2 constraints,
    ...
    column_name_n column_type_n constraints
)

column_name 是列的名字,column_type 是列的数据类型,constraints 是列的约束条件(包括是否允许为空、是否自增、默认值、断言检查等)。

【实践】

  创建一个雇员表 emp,表中包括 ename(姓名)、hiredate(雇佣日期)、sal(薪水)3个字段,字段类型分别为 varchar(10)、date、int(2)。

通过以下命令可以查看表的结构:

DESC tablename;

还可以通过以下命令查看更加全面的表定义信息:

show create table tablename \G;   
// \G 选项的含义是使得记录能够按照字段竖向排列,以便更好地显示内容较长的记录。

如图所示,输出的是可以直接执行的建表的SQL:

④ 删除表

通过以下命令删除表:

DROP TABLE tablename

删除数据表 emp

⑤ 修改表

a. 修改表字段类型

ALTER TABLE tablename MODIFY [COLUMN] column_definition [FIRST | AFTER col_name]

修改 emp 表的 ename 字段类型为 varchar(20)

b. 增加表字段

ALTER TABLE tablename ADD [COLUMN] column_definition [FIRST | AFRER col_name]

emp 表增加一个 age 字段,类型为 int(3)

c. 删除表字段

ALTER TABLE tablename drop [COLUMN] col_name

删除 emp 表的 age 字段

d. 字段改名

ALTER TABLE tablename CHANGE [COLUMN] old_col_name column_definition [FIRST | AFTER col_name]

修改 emp 表的 age 字段名为 age1,同时将字段类型改为 int(4)

PS. change 和 modify 都可以修改表的定义,不同的是 change 后面需要写两次列名,不方便。但是 change 的优点是可以修改列名称,modify 则不能。

e. 修改字段排列顺序

使用 first|after column_name 选项。

emp 表新增 birth date 字段并加在 ename 之后

f. 更改表名

ALTER TABLE tablename RENAME [TO] new_tablename

将表 emp 改名为 emp1

(3)DML

① 增

使用 insert 命令进行新增,语法如下:

INSERT INTO tablename (field1,field2,...,fieldn) values (value1,value2,...,valuen);

emp 表中插入一条记录(指定要插入的列和值)

如果不指定字段名,则默认按照表定义顺序来,值应该跟字段排列顺序保持一致,每个字段都必须有对应的值即使是 null。

显示指定字段时,含可空的字段、非空但是含有默认值的字段以及自增字段,可以不再 insert 后的字段列表里面出现,values 后面只写对应字段名称的值。

一次性插入多条数据,可以提高插入数据的性能,语法如下:

INSERT INTO tablename (field1, field2, ..., fieldn)
VALUES
(record1_value1, record1_value2, ..., record1_valuen),
(record2_value1, record2_value2, ..., record2_valuen),
...
(recordn_value1, recordn_value2, ..., recordn_valuen)
;

dept 表中插入两条记录

② 改

使用 update 命令进行更改,语法如下:

UPDATE tablename SET field1=value1,field2=value2,...,fieldn=valuen [WHERE CONDITION]

更新 emp 表中 ename 为 "james" 的薪水为 4000

update 命令可用于更新多个表中数据,语法如下:

UPDATE t1,t2,...,tn set t1.field1=expr1,tn.fieldn=exprn [WHERE CONDITION]

将计算机系的雇员的工资提高 10%(联表更新,利用一个表的字段来更新另一个表的字段)

③ 删

使用 delete 命令进行删除,语法如下:

DELETE FROM tablename [WHERE CONDITION]

删除 emp 表名字为 "tony" 的雇员

一次性删除多个表的数据,语法如下:

DELETE t1,t2,...,tn FROM t1,t2,...,tn [WHERE CONDITION]

删除没有所属部门的雇员

④ 查

使用 select 命令,语法如下:

SELECT * FROM tablename [WHERE CONDITION]

(4)DCL

① 授权

grant [insert,delete,select,update(col_name)] on dbname.[*|tablename] to user@host identified by password;

创建一个用户 z1,具有对 sakila 数据库中所有表的 SELECT/INSERT 权限:

grant select,insert on sakila.* to 'z1'@'localhost' identified by '123';

② 回收权限

revoke [insert,delete,select,update(col_name)] on dbname.[*|tablename] from user@host;

回收用户 Amit 对学校数据库的 department 表的查询权限

revoke select on school.department from Amit@www.scau.edu.cn;
上一篇下一篇

猜你喜欢

热点阅读