MySQL数据库-DDL与DML
SQL介绍
什么是SQL?
Structured Query Language:结构化查询语言。其实就是定义了操作所有关系型数据库的规则。
每一种数据库操作的方式可能会存在一些不一样的地方,我们称为“方言”。
SQL通用语法
SQL 语句可以单行或多行书写,以分号结尾。
可使用空格和缩进来增强语句的可读性。
MySQL 数据库的 SQL 语句不区分大小写,关键字建议使用大写。
数据库的注释:
单行注释:-- 注释内容 #注释内容(mysql特有)
多行注释:/* 注释内容 */
SQL分类
DDL(Data Definition Language)数据定义语言
用来定义数据库对象:数据库,表,列等。关键字:create, drop,alter 等
DML(Data Manipulation Language)数据操作语言
用来对数据库中表的数据进行增删改。关键字:insert, delete, update 等
DQL(Data Query Language)数据查询语言 (最重要!!!)
用来查询数据库中表的记录(数据)。关键字:select, where 等
DCL(Data Control Language)数据控制语言(了解)
用来定义数据库的访问权限和安全级别,及创建用户。关键字:GRANT, REVOKE 等
DDL数据定义语言
DDL数据库
查询数据库
(1)查询所有数据库
SHOW DATABASES;
(2)查询某一个数据库的创建语句
SHOW CREATE DATABASE demo;
创建数据库
(1)创建名为demo的数据库
CREATE DATABASE demo;
(2)创建数据库(判断,如果不存在就创建) (exists)
CREATE DATABASE IF NOT EXISTS demo;
如果已经创建过该数据库——demo,程序不会报错,但是会有警告
(3)创建数据库(指定字符集) (character set)
CREATE DATABASE demo01 CHARACTER SET utf8;
警告不用管!这样子就创建了一个名为demo01且字符集为utf8的数据库。
小案例
创建demo02数据库、如果不存在则创建,指定字符集为gbk
CREATE DATABASE IF NOT EXISTS demo02 CHARACTER SET gbk;
可以使用show create database demo02; 查看字符集
修改,删除,使用数据库
(1)修改数据库的字符集 (character set)
ALTER DATABASE demo CHARACTER SET gbk;
上述SQL代码把demo的字符集修改为了gbk
为了加深记忆,我们将其与上述的(3)创建数据库(指定字符集)进行对比
-- 修改数据库的字符集
ALTER DATABASE 数据库名 CHARACTER SET 字符集;
-- 指定字符集创建数据库
CREATE DATABASE 数据库名 CHARACTER SET 字符集;
(2)删除数据库 (drop)
DROP DATABASE demo01;
(3)删除数据库(判断,如果存在则删除)
DROP DATABASE IF EXISTS demo02;
(4)使用数据库
USE demo;
(4.1)查询正在使用的数据库
SELECT DATABASE();
DDL数据表
数据表的查询
(1)查询所有的数据表
SHOW TABLES;
因为这里的db1数据库中只有一个表
(2)查询表的结构 (desc)
DESC student;
表的详细结构信息
(3)查询表的状态信息 (status,like)
SHOW TABLE STATUS FROM 数据库 LIKE '数据表';
SHOW TABLE STATUS FROM db1 LIKE 'student';
数据表的创建
(1)创建数据表
其中约束在后续的章节中详细讲解!
-- 创建商品表(商品编号,商品名称,商品价格,商品库存,上架时间)
CREATE TABLE product(
id INT,
NAME VARCHAR(20),
price DOUBLE,
num INT,
insert_time DATE
);
-- 查看product表的详细结构
DESC product;
(补)数据类型(部分)
1. int:整数类型
2. double:小数类型
3. date:日期,只包含年月日 yyyy-MM-dd
4. datetime:日期,包含年月日时分秒 yyyy-MM-dd HH:mm:ss
5. timestamp:时间戳类型 包含年月日时分秒 yyyy-MM-dd HH:mm:ss
如果将来不给这个字段赋值,或赋值为null,则默认使用当前的系统时间,来自动赋值
6. varchar:字符串
数据表的修改(结构上的修改)
(1)修改表名 (rename to)
将product表的名字改为product2
ALTER TABLE product RENAME TO product2;
(2)修改表的字符集 (character set)
将demo数据库中的product2表的字符集改为utf8.
ALTER TABLE product2 CHARACTER SET utf8;
注:可以和上面再对比一下
-- 修改数据库的字符集
ALTER DATABASE 数据库名 CHARACTER SET 字符集;
-- 指定字符集创建数据库
CREATE DATABASE 数据库名 CHARACTER SET 字符集;
-- 修改表的字符集
ALTER TABLE 表名 CHARACTER SET 字符集;
(3)单独添加一列 (add)
将product2表添加一列color
ALTER TABLE product2 ADD color VARCHAR(10);
(4)修改表某一列的数据类型 (modify)
ALTER TABLE product2 MODIFY color INT;
已经将varchar(10)改为了int数据类型。
(5)修改列名和数据类型 (change)
ALTER TABLE 表名 CHANGE 旧列名 新列名 新列的数据类型;
ALTER TABLE product2 CHANGE color address VARCHAR(200);
(6)删除某一列 (drop)
删除address列
ALTER TABLE product2 DROP address;
数据表的删除
(1)删除数据表
DROP TABLE product2;
(2)删除数据表(判断,存在就删除)
DROP TABLE IF EXISTS product2;
DML数据操作语言
新增表数据
(1)给指定列添加数据
列名和值的数量以及数据类型要对应,除了数值类型,其他的数据类型都要加引号,(单、双都可以,推荐单引号)
-- 完整写法
INSERT INTO 表名(列名1,列名2,...) VALUES (值1,值2,...);
INSERT INTO product (id,NAME,price,num) VALUES (100,'张三',5,5);
SELECT * FROM product;
注意:
这一种方式添加一行数据,某一个数据项可以没有数据,当对应列名的位置应该去除,如下:
id为100,name为李四,price为空,num为空。
INSERT INTO product (id,NAME) VALUES (100,'李四');
(2)默认给全部列添加数据
-- 省略列名
INSERT INTO 表名 VALUES (值1,值2,值3,...);
INSERT INTO product VALUES (101,'电脑',9999.99,23);
(3)批量添加数据
-- 多个值之间使用 "," 隔开
INSERT INTO 表名 VALUES (值1,值2,值3,...),(值1,值2,值3,...),(值1,值2,值3,...);
INSERT INTO product VALUES
(101,'电脑',9999.99,23),
(102,'笔记本',2.99,2),
(103,'电饭煲',99.99,53);
SELECT * FROM product;
修改、删除表数据
(1)修改表中的数据 (update)
UPDATE 表名 SET 列名1=值1,列名2=值2,... [WHERE条件];
修改语句中必须加条件,如果不加条件,则会将所有数据都修改。
UPDATE product SET price=3500 WHERE NAME = '电脑';
将name值为电脑的price值改为3500。
(2)删除表中的数据 (delete)
DELETE FROM 表名 [WHERE 条件];
删除语句中必须加条件,如果不加条件,则会将所有数据都删除。
DELETE FROM product WHERE NAME = '电脑';
将name值为电脑的记录删除了。