目录
3.1DDL:数据定义语言,用于创建数据库对象,如库、表、索引等
3.2DML:数据操纵语言,用于对表中的数据进行管理,用来插入、删除和修改数据库中的数据
前言:MySQL 是最流行的关系型数据库管理系统,本文将介绍MySQL的基本操作,数据库、表、字段的增删改查等一些常规操作
数据库----->数据表----->行(记录):用来描述一个对象的信息
数据库----->数据表----->列(字段):用来描述对象的一个属性
注:char如果存入数据的实际长度比指定长度要小,会补空格至指定长度,如果存入的数据的实际
长度大于指定长度,低版本会被截取,高版本会报错
主键是唯一的,但主键可以由多个字段构成
char占用空间,查询效率高,最大达到255;varchar不占用空间,查询效率低,最大可达到65535
- mysql -u root -p
- 输入密码
- SHOW DATABASES;
- #大小写不区分,分号“;”表示结束
- USE 数据库名;
- SHOW TABLES;
- #示例1
- use mysql
- show tables;
- use mysql
- describe user;
- 或
- desc user;
- 或
- desc user \G
- 使用绝对路径查看
- desc mysql.user;
Field | 字段名称 |
type | 数据类型 |
Null | 是否允许为空 |
Key | 主键 |
Type | 数据类型 |
Null | 是否允许为空key:主键 |
Default | 默认值 |
Extra | 扩展属性,例如:标志符列 |
id | 1 3 5 7 |
- #在mysql内查看mysql版本
- select version();
- #在linux系统中查看mysql版本
- mysql -V
SQL语句用于维护管理数据库,包括数据查询、数据更新、访问控制、对象管理等功能
SQL语句分类:
语句 | 代表的意思 |
DDL | 数据定义语言,用于创建数据库对象,如库、表、索引等 |
DML | 数据操纵语言,用于对表中的数据进行管理,用来插入、删除和修改数据库中的数据 |
DQL | 数据查询语言,用于从数据表中查找符合条件的数据记录 |
DCL | 数据控制语言,用于设置或者更改数据库用户或角色权限 |
create:创建
drop:删除
alter:修改
- CREATE DATABASE 数据库名;
- #示例:创建一个名为vermouth的数据库
- creat database vermouth;
- create database [数据库名];创建数据库
-
- show databases; 查看已有数据库
-
- drop database [数据库名]; 删除指定数据库
-
- show databases; 查看已有数据库
- #主键一般选择能代表唯一性的字段不允许取空值(NULL),一个表只能有一个主键。
- CREATE TABLE 表名 (字段1 数据类型,字段2 数据类型[,...][,PRIMARY KEY (主键名)]);
- #示例:
- use vermouth;
- create table xiao (id int NOT NULL,name char(10) NOT NULL,score decimal(5,2),passwd char(48) DEFAULT'',PRIMARY KEY (id));
- desc xiao; #查看xiao数据表的各个字段
- create table cha (id int NOT NULL,name char(10) NOT NULL,score decimal(5,2),passwd char(48) DEFAULT'',PRIMARY KEY (id));
- show tables;
- drop table cha; ##删除指定的表
- show tables;
- #如不用USE进入库中,则需加上数据库名
- DROP TABLE [数据库名.] 表名;
insert:插入
update:修改
delete:删除
- #向数据表中插入新的数据记录
- insert into 表名(字段1,字段2,字段3) values(字段1的值,字段2的值,字段3的值);
-
- #示例
- INSERT INTO xiao (id,name,score,passwd) values(1,'zhangsan',90,PASSWORD('123456'));
- #PASSWORD('123456'):查询数据记录时,密码字串以加密形式显示;如果不使用PASSWORD(),查询时以明文显示
-
- select * from xiao;
- #格式
- UPDATE 表名 SET 字段名1=字段值1[,字段名2=字段值2] [WHERE 条件表达式];
-
- #示例
- UPDATE xiao SET name='wangwu',passwd='' WHERE id=1;
- #格式:
- DELETE FROM 表名 [WHERE 条件表达式];
-
- #示例:
- delete from xiao where id=4;
select:查询
- #格式
- SELECT 字段名1,字段名2[,...] FROM 表名 [WHERE 条件表达式];
示例1:查看所有数据
select * from xiao
示例2:查询指定数据
- select name,score from xiao;
- select name,score from xiao where id=1;
示例3:以列表方式竖向显示
select * from xiao \G
示例4:只显示前2行
select * from xiao limit 2;
示例5:显示第一行后的前俩行
select * from xiao limit 1,2;
- #格式
- ALTER TABLE 旧表名 RENAME 新表名;
- #示例
- alter table xiao rename cheng;
- #default 'default值':表示此字段设置默认值 地址未填写!;可与 NOT NULL 配合使用
- ALTER TABLE 表名 ADD address varchar(50) default 'default值';
- #示例
- alter table cheng add address char(20) default '地址不详';
3.4.3修改字段(列)名,添加唯一键
- #格式
- ALTER TABLE 表名 CHANGE 旧列名 新列名 数据类型 [unique key];
- unique key:唯一键(特性:唯一,但可以为空,空值只允许出现一次)
- key:唯一且非空(主键一般选择能代表唯一性的字段不允许取空值(NULL),一个表只能有一个主键)
- CHANGE:可修改字段名、数据类型、约束等所有项
- 每个表中只能由一个主键 ,但是许多内容都需要唯一性,这就是唯一键的作用
-
- #示例
- alter table cheng change name user_name char(100) unique key;
- #格式
- ALTER TABLE 表名 drop 字段名;
-
- #示例
- alter table cheng drop score;
- use vermouth;
-
- create table if not exists kfc (
- id int(4) zerofill primary key auto_increment,
- name varchar(10) not null,
- cardid int(18) not null unique key,
- hobby varchar(50));
进行测试:
- insert into kfc values(1,'zhangsan',123456,'钓鱼');
-
- select * from kfc;
-
- insert into kfc (name,cardid,hobby) values('lisi',456789,'学习');
-
- select * from kfc;
- #通过like方法,复制kfc表结构生成kfc01表
- create table kfc01 like kfc;
- #导入数据
- insert into kfc01 select * from kfc;
create table kfc02 (select * from kfc);
- #获取数据表的表结构、索引等信息
- show create table kfc01\G
DELETE清空表后,返回的结果内有删除的记录条目;DELETE工作时是一行一行的删除记录数据的;如果表中有自增长字段,使用DELETE FROM 删除所有记录后,再次新添加的记录会从原来最大的记录 ID 后面继续自增写入记录
- #delete from 表名;
- delete from kfc;
删除类型小结:
- drop table table_name
- 属于DDL
- 不可回滚(无法回复)
- 不可带where
- 表内容和结构删除
- 删除速度快
-
- truncate table table_name
- 属于DDL
- 不可回滚
- 不可带where
- 表内容删除
- 删除速度快
-
- delete from table_name
- 属于DML
- 可回滚(可恢复)
- 可带where
- 表结构在,表内容要看where执行的情况
- 删除速度慢,需要逐行删除
-
- 不再需要一张表的时候用drop
- 想删除部分数据行时候,用delete,并且带上where子句
- 保留表而删除所有数据的时候用truncate
-
- 删除速度:drop > truncate > delete
- 安全性:delete 最好
临时表创建成功之后,使用SHOW TABLES命令是看不到创建的临时表的,临时表会在连接退出后被销毁。 如果在退出连接之前,也可以可执行增删改查等操作,比如使用 DROP TABLE 语句手动直接删除临时表
- ##添加临时表kfc03
- create temporary table kfc03 (
- id int(4) zerofill primary key auto_increment,
- name varchar(10) not null,
- cardid int(18) not null unique key,
- hobby varchar(50));
-
- ## 查看当前库中所有表
- show tables;
- ##在临时表中添加数据
- insert into kfc03 values(1,'zhangsan',123456,'running');
- ##查看当前表中所有数据
- select * from kfc03;
- ##退出数据库
- quit
-
- ##重新登录后进行查看
- mysql -u root -p
- ##查看之前创建的临时表中所有数据,发现已经被自动销毁
- select * from test03;
int(4)zerofill:表示若数值不满4位数,则前面用"0"填充,例:0001
auto_increment:表示此字段为自增长字段,即每条记录自动递增1,默认从1开始递增;自增长字段数据不可以重复;自增长字段必须是主键;如添加的记录数据没有指定此字段的值且添加失败也会自动递增一次
unique key:表示此字段唯一约束,此字段数据不可以重复:一张表中只能有一个主键,但是一张表中可以有多个唯一键
not null:表示此字段不允许为NULL
本章我们学习了数据库的基本操作以及基本命令,数据库管理的SQL语句:DDL、DML、DQL、DCL。如何进行增删改查,在进行数据库操作时,指令后要加分号;