目录
一,数据库
–1,概述
作用就是用来存储数据和管理数据,本质上就是需要安装MySQL软件.
分类: 关系型数据库MySQL 和 非关系型数据库Redis ,主要观察数据之间的关
–2,使用
1,安装服务器端: 存数据,管理数据
1.核心步骤: 设置字符集/编码成 utf-8 , 端口号3306 , 设置服务名称MySQL , 设置密码root
2,安装客户端: 连接服务器,操作服务器里的数据
1,小黑窗口/DOS窗口:
--从开始菜单里找MySQL/Mariadb,输入密码
--win+r 然后输入cmd
```
#发起MySQL的命令 -u是指定用户名(root) -p是指定密码(自定义的)
mysql -uroot -proot
```
2,图形化的工具:sqlyog
3,数据库的结构
数据库 -> 表(行和列) -> 数据
4,SQL语言
1,概述
结构化查询语言,用来操作数据库的语言,是一种标准.
增删改查里将来发生最多的业务就是: 查 !!!
2,分类:
DML是数据操纵语言
DDL是指数据定义语言
DCL是指数据控制语言
DQL是指数据查询语言
二,数据库的常见操作
增删改查 CRUD
–1,创建库
创建库也可以简写成:create table cgb charset utf8 ;
–2,查询库
–4,删除库
三,表的常见操作
增删改查 CRUD
–1,使用指定的数据库
–2,创建表
语法:
create table 表名(字段名称 字段类型(字段长度),字段2,字段3,...
练习:
mysql> create table tb_order_detail(
-> id int(11),
-> order_id int(11),
-> num tinyint(4),
-> item varchar(30),
-> price double
-> );
Query OK, 0 rows affected (0.02 sec)
–3,查看表
mysql> show tables;
+---------------------+
| Tables_in_cgb210901 |
+---------------------+
| tb_door |
| tb_order_detail |
+---------------------+
2 rows in set (0.00 sec)
–4,修改表
mysql> alter table tb_door add column money numeric(7,2);
Query OK, 0 rows affected (0.02 sec)
Records: 0 Duplicates: 0 Warnings: 0
–5,描述表结构
–6,删除表
mysql> drop table tb_door;
Query OK, 0 rows affected (0.00 sec)
四,表记录的常用操作
增删改查 CRUD
–1,查询数据/记录
- 查询tb_door表中的所有记录
SELECT * FROM tb_door;
–2,插入数据/记录
语法:insert into 表名 values(1,2,3,4,5,6)
注意:
1, 需要设置几个值?要看表里有几个字段
2, 值的顺序要和字段的顺序保持一致
3, 如果字段是字符串类型,设置值时必须要有" " ’ '的标记
- 向tb_door表中插入2条记录
insert into tb_door values(null,'永和大王1店',666);
insert into tb_door values(null,' 永和大王2店',888);
–3,修改数据/记录
- 修改tb_door表中id为1的记录
update tb_door set tel=555 where id=1;
–4,删除数据/记录
- 删除tb_door表中id为2的数据
Delete from tb_door where id=2;
–5, 排序
- 将tb_door表记录按照tel排序
Select * from tb_door order by tel desc;
-6, 记录总数
- 查询tb_door表中的总记录数
Select count(*) from tb_door;
五,数据库的使用细节
–1,命名规范
1, 以字母开头,不要以数字开头
2, 不能使用保留字:select / from / update / delete / insert into
3, MySQL数据库不区分大小写,多个单词用下划线分开
–2,数据类型
1, 整型:int
2, 小数:double(不精确) / numeric(a,b) / decimal(a,b)–a是数字的位数b是小数位数
3, 时间: date(年月日) time(时分秒) datetime(年月日时分秒) timestamp(时间戳,毫秒数)
4, 字符串: char / varchar
区别:
char 是固定长度,浪费空间char(10)
varchar 是可变长度,节省空间varchar(10)
特殊场景: 数据长度如果就是固定的,优先选char,因为查的快
5, 图片: 如果想存入数据库,只会存文件的磁盘路径D:/abc/1.jpg,不是存文件本身
六, 字段约束
使用的时间: 通常在设计表创建表时就已经确定了
–1,非空约束not null
哪个字段添加了非空约束,从此,字段值不能为空,使用not null
mysql> create table b(
-> password varchar(100) not null #给字段添加非空约束
-> );
Query OK, 0 rows affected (0.01 sec)
mysql> insert into b values('abc'); #password字段设置了值,执行OK
Query OK, 1 row affected (0.00 sec)
mysql> insert into b values(null); #password字段值不能设置成null,否则不符合非空约束啦,报错!
ERROR 1048 (23000): Column 'password' cannot be null
–2,主键约束primary key
每个表都应该设计主键 , 主键是每条记录/数据的唯一标识.
现象是: 字段的值必须唯一且不能为空,使用primary key
主键自增策略: 使用auto_increment,让主键的值交给数据库自动维护
mysql> create table g(
#字段名 字段类型 主键 自增
-> id int primary key auto_increment,
-> name varchar(100),
-> age int
-> );
Query OK, 0 rows affected (0.00 sec)
#主键的值不用自己设置null,数据库会自增
mysql> insert into g values(null,'tony',18);
Query OK, 1 row affected (0.00 sec)
mysql> select * from g;
+----+------+------+
| id | name | age |
+----+------+------+
| 1 | tony | 18 |
+----+------+------+
1 row in set (0.00 sec)
–3,唯一约束unique
哪个字段添加了唯一约束,从此,字段值不能相同
C:\Users\WangYiBo>mysql -uroot -proot
#使用用户名root和密码root来连接数据库
mysql> show databases; #展示所有数据库
mysql> use cgb210901; #使用指定的数据库
mysql> show tables; #展示所有表
#唯一约束:添加后,字段值不能重复
CREATE TABLE d( #创建表
tel CHAR(11) UNIQUE #唯一约束
#字段名称 字段类型(字段长度)
);
INSERT INTO d VALUES('12345678901'); #成功
INSERT INTO d VALUES('12345678901'); #报错,值相同啦.
#Duplicate entry '12345678901' for key 1
练习:
mysql> create table e( #创建表
-> password varchar(10) not null unique
#字段名称 字段类型(字段长度) 非空约束 唯一约束
-> );
Query OK, 0 rows affected (0.01 sec)
mysql> insert into e values(null); #报错,字段值不符合非空约束
ERROR 1048 (23000): Column 'password' cannot be null
mysql> insert into e values('123'); #正确的,因为满足了非空约束和唯一约束
Query OK, 1 row affected (0.00 sec)
mysql> insert into e values('123');#报错,字段值不符合唯一约束
ERROR 1062 (23000): Duplicate entry '123' for key 1
mysql>
–4,外键约束 foreign key
使用明确的一段代码表示,两个表之间的关系
#外键约束:先创建外键+再使用外键
CREATE TABLE tb_user(
id INT PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR(20),
age INT,
sex CHAR(10) DEFAULT '男'#默认约束
)
CREATE TABLE tb_user_address(
user_id INT PRIMARY KEY,
address VARCHAR(200),
#foreign key(当前表的主键名) references 对方表(对方的主键)
FOREIGN KEY(user_id) REFERENCES tb_user(id)#1.创建外键
)
#2.使用外键
#约束的情况1:子表的主键值 必须 取自 主表的主键值
#约束的情况2:主表的记录不能随便删,要保证没有被子表使用才可以删
–5,默认约束 default
哪个字段添加了默认约束,从此字段值的就有了默认值
#默认约束:给字段设置默认值而不是默认的null,使用default
CREATE TABLE a(
id INT PRIMARY KEY AUTO_INCREMENT,
sex VARCHAR(10) DEFAULT '男'#默认约束
)
–6,检查约束 check
哪个字段添加了检查约束,从此,字段值必须符合检查的条件才可以
#检查约束:使用check,了解
CREATE TABLE b(
id INT PRIMARY KEY AUTO_INCREMENT,
age INT,
CHECK(age<200 AND age>0)#检查约束
#数据要满足检查条件才可以
)