数据库概述
MySql数据库卸载与安装
卸载
- 停止mysql服务
- 进入控制面板->卸载
- 进入program files目录删除->mysql子目录(安装的参与文件)
- 进入programData目录(默认隐藏)删除mysql子目录->(数据文件所在目录)
Mysql基本命令
-
登录到mysql命令行客户端(cmd)
mysql -h localhost -uroot -p123456
-
修改密码(cmd)
mysqladmin -uroot -p123456 password root
-
在系统命令行中创建数据库实例
mysqladmin -uroot -proot create mydb
-
在系统命令行中删除数据库实例
mysqladmin -uroot -proot drop mydb
-
显示mysql数据库的实例
show databases;
-
创建新的数据库实例
create database mydb;
-
使用实例
use mydb
-
显示实例中的所有表
show tables;
-
查看指定表结构
desc user;
-
从mysql命令行客户端退出
exit/quit
-
放弃正在输入的命令,进入下一次输入
\c[lear]
-
打开命令列表
\h[elp]
SQL语句入门
SQL(Structured Query Language),结构化查询语句,语法类似英语口语, 是一门用于操作数据库的通用命令语言;SQL语句一般分为以下几类:
- DDL语句(数据定义语句)
- DML语句(数据操作语句)
- DCL语句(数据控制语句)
- 内置函数
DDL语句
数据定义语句,一般包含对于数据库,表,视图,索引,过程,函数,触发器等进行结构操作的语句,比如:创建表,删除表,修改表结构都称之为DDL;一般包含这些命令:create、drop、alter、change、modify、add等。
-
创建一张表:
create table student( sno int, sname varchar(10), age int, sex char(2) );
-
向表中新增列(向表student中新增一个birth列,类型为date)
alter table student add birth date;
-
删除列(删除表student中的age列)
alter table student drop age;
-
修改表名称
rename table student to tb_stu;
alter table tb_stu rename to stu;
-
修改列名称
alter table stu change birth birthday date;
-
修改列类型
alter table product modify price decimal(7,2);
-
向表中的指定字段添加约束
alter table stu add constraint primary key(sno);
-
删除表
drop table stu;
DML语句
数据操作语句,一般包含用于对表中的数据操作的命令,比如:新增数据,删除数据,修改数据,查询数据;包含的命令有: insert、delete、update、select等。
-
添加数据到表中
insert into 表名称(列名…) values(值…)
向所有列插入值
insert into emp values(1001,'易大师',3500.06,'2018-10-01');
向指定列插入值
insert into emp(ename,sal,hiredate) values('马尔咋哈',8500.09,now());
向表中一次性插入多行记录
insert into emp(ename,sal,hiredate) values('波比',4398.67,'2018-12-12'), ('艾希',9566.8,'2017-11-11'), ('墨菲特',4300,'2019-01-22');
-
查询所有数据
select 列名 from 表名称 [附加条件]
select * from emp;
-
修改表数据
update 表名称 set 列名1=新值1,列名2,=新值2… where 条件
update emp set sal=3501.06 where eno=1001;
-
删除记录
delete from 表名称 where 条件
delete from emp where eno=1003;
DCL语句
数据控制语句,一般由数据库管理员(DBA),使用这些命令,操作数据库相关的权限,比如授权,解除权限,常见命令有: grant、revoke等。
Mysql数据类型
在程序中,只要是数据就存在数据类型,因此在mysql数据中对于不不同的数据也会使用不同的数据类型来声明,mysql中数据类型分为以下几类:
- 数值类型(整数型,浮点型)
- 字符串型(可变长度字符串以及定长字符串)
- 日期时间类型
数值类型
类型名称 | 长度 |
---|---|
bit | 1bit |
tinyint | 1字节 |
smallint | 2字节 |
mediumint | 3字节 |
int | 4字节 |
bigint | 8字节 |
float | 4字节 |
double | 8字节 |
decimal(m,n) | m个字节,小数点有n位 |
auto_increment
设置列自动递增,一般只能对标识列(主键列)设置,并且必须是整数型类型。
unsigned
设置列为无符号列,即列值不允许为负数
zerofill
设置前导填充,当数值长度未达到定义长度时,前面补零填充宽度
字符串类型
类型名 | 描述 |
---|---|
char(m) | 定长字符串 |
varchar(m) | 可变长度字符串 |
tinyblob | 二进制大对象 |
smallblob | 二进制大对象 |
mediumblob | 二进制大对象 |
longblob | 二进制大对象(2G) |
tinytext | 大文本对象 |
smalltext | 大文本对象 |
mediumtext | 大文本对象 |
longtext | 大文本对象(2G) |
enum | 枚举(只能从枚举中选择一个作为值) |
set | 集合(功能同上,只能包含64个元素) |
char和varchar的区别:
char:是一个定长字符串,取值范围是0~255之间(根据数据库的编码来决定),一旦使用char类型定义列,则在添加数据时无论数据的实际大小是多大,始终会见申请的空间占满,不够使用空格填充。因此char类型一般用于长度确定的数据列(比如:手机号,性别,身份证号等)。
varchar:是一个可变长度的字符串,取值范围是0~65535之间(根据数据库的编码来决定),在定义字符串列时,如果使用varchar,则在添加数据到列中时,系统会自动根据添加的数据长度申请空间,因此从存储角度来说varchar更节省空间,效率实际低于char;因此varchar一般用于长度不确定的字符串列
字符串类型占据的空间跟编码有关。UTF-8占据3个字节,GBK占据2字节
日期类型
类型名 | 描述 |
---|---|
time | 表示时间(3字节) |
date | 表示日期(3字节) |
datetime | 表示日期时间(8字节) |
timestamp | 时间戳(精确时间)(4字节) |
year | 表示年(1字节) |
使用timestamp类型时,可以指定默认值为CURRENT_TIMESTAMP,但是一张表中只允许一个timestamp列的默认值为CURRENT_TIMESTAMP.
常用数据类型总结
虽然mysql中包含很多数据类型,但是实际开发中也只会选择一些常见的数据类型,如下表:
##约束
为了维护数据的完整性,一般在数据库系统中都会有一些维护完整性的解决方案,比较常见的方式为两种:
- 约束(constraint)
- 触发器(trigger)
约束分类
-
主键约束(primary key)
-
不为空约束(not null)
-
唯一约束(unique)
-
检查约束(check)(mysql无效)
-
外键约束(foreign key)
create table t( id int auto_increment, name varchar(32) not null, loginid varchar(20) unique, sex char check(sex in('男','女')), primary key(id) );
-
新增列的同时设置该列为外键列并关联指定表的主键列
alter table emp add dno int references dept(dno);
-
修改表中的指定列为外键
alter table emp add constraint foreign key(dno) references dept(dno);