MYSQL学习笔记(二)——数据库和数据表操作

MYSQL数据库学习笔记(二)

目录

  • MYSQL数据库学习笔记(二)
    • 一、MYSQL数据库操作
      • (一)创建数据库
      • (二)指定当前数据库
      • (三)修改数据库
      • (四)删除数据库
    • 二、数据表操作
      • (一)创建数据表
      • (二)复制现成的表
      • (三)修改数据表
        • 1.add实例
        • 2.modify实例
        • 3.实例练习
        • 4.更改表名
        • 5.删除表
    • 三、表记录的操作
      • (一)插入记录
        • 1.插入新记录
        • 2.从已有表中插入新记录
        • 3.插入图片
      • (二) 修改记录
        • 1.替换旧纪录
        • 2.修改单个表
        • 3.修改多个表
      • (三)删除记录
        • 1. 删除满足条件的行
        • 2. 从多个表中删除行
        • 3.清除表记录

一、MYSQL数据库操作

(一)创建数据库

语法格式:

Create  database  [if not exists]  数据库名
	[default]  character  set  字符集
	[default]  collate  校对规则名;

说明:

  1. if not exists:在创建数据库前判断是否存在,存在则不创建(若不添加该语句则会报错),不存在则执行。
  2. character set:指定数据库字符采用的默认字符集。
    Collate:指定字符集的校对规则。

例如:
MYSQL学习笔记(二)——数据库和数据表操作_第1张图片
实例: 创建mytest数据库
输入:

Create database if not exists mytest
Default character set gb2312
Default collate gb2312_chinese_ci;

输出:
在这里插入图片描述

(二)指定当前数据库

一般需要对一个数据库中的某一个数据表进行操作,此时需要指定该数据库为当前数据库才能进行后续操作。
语法格式:

Use 数据库名;

实例: 指定mytest数据库
输入:

Use mytest;

输出:
在这里插入图片描述

(三)修改数据库

数据库创建后,如果需要修改数据库参数,可以使用alter database命令,其他格式与create database相同。
语法格式:

alter  database  [if not exists]  数据库名
	[default]  character  set  字符集
	[default]  collate  校对规则名;

实例: 修改mytest数据库默认字符集和校对规则
输入:

Alter database mytest
Default character set gb2312
Default collate gb2312_chinese_ci;

输出:
在这里插入图片描述

(四)删除数据库

语法格式:

Drop database [if exists] 数据库名;

说明:

  1. If exists:用处和create 的if not exists 相同。
  2. 需要注意,一个数据库中有多个数据表,一但删除数据库,则会将数据库中的所有数据表全部删除,因此在执行该命令前应先考虑清楚所要删除的具体内容,避免不必要的损失。

实例: mytest数据库

Drop database if exists mytest;
Show databases;

输出:
MYSQL学习笔记(二)——数据库和数据表操作_第2张图片
从图片可以看出mytest数据库已被删除。

二、数据表操作

(一)创建数据表

语法格式:

Create table [if not exists] 表名
([列定义][表索引定义])
[表选项][select语句];

说明:

  1. 列定义:包括列名、数据类型,可能还有一个空值声明和一个完整性约束。
  2. 表索引项定义:主要用于定义表的索引、主键、外键等。
  3. Select语句:用于在一个已有表的基础上创建表。

实例: 在student数据库里面创建学生表xs
输入:

Create database student;
Use student;
create table xs
   (学号 char(6) not null primary key,
    姓名 char(8) not null,
    专业名 char(10) null,
    性别 tinyint(1) not null default 1,
    出生日期 date not null,
    总学分 tinyint(1) null,
    照片 blob null,
    备注 text null);

输出:
在这里插入图片描述
MYSQL学习笔记(二)——数据库和数据表操作_第3张图片
查看student数据库中的数据表和查看xs表信息
输入:

Show tables;
Describe xs;

输出:
MYSQL学习笔记(二)——数据库和数据表操作_第4张图片

(二)复制现成的表

即如果创建的表与已有的表相似,我们也可以直接复制数据库中已有的表结构和数据,然后对表进行修改。
语法格式:

Create table [if not exists] 表名
	[like 已有表名]
	[as (复制表记录)];

说明:

  1. Like关键字后面表名应该已经存在。
  2. As后为可以复制表的内容。例如可以为一条select语句(查询表记录)。但索引和完整性约束是不会复制的。

实例: 表格复制
先创建一个user表,并向表内添加表记录
输入:

create database mytest;
use mytest;
create table user(id int auto_increment not null primary key,username varchar(10) not null,password varchar(10) not null);
insert into user values(1,'Tom','19970504');
insert into user values(2,'Jack','19980606');
describe user;
select * from user;

输出:
MYSQL学习笔记(二)——数据库和数据表操作_第5张图片
MYSQL学习笔记(二)——数据库和数据表操作_第6张图片
创建两个表,一个表的结构取自user表,另一个表的结构和内容取自user表
输入:

create table user_copy1 like user;
create table user_copy2 as (select * from user);
describe user_copy1;
describe user_copy2;
select * from user_copy1;
select * from user_copy2;

输出:
MYSQL学习笔记(二)——数据库和数据表操作_第7张图片
MYSQL学习笔记(二)——数据库和数据表操作_第8张图片

(三)修改数据表

语法格式:

Alter table 表名
	Add 列定义[first|after 列名]
	Modify 列定义
	Alter 列名{set default|drop default}
	Chance 列名 原列名
	Drop 列名
	Rename [to] 新表名

说明:

  1. Add子句:向表中增加新列。通过first|after列名指定增加列的位置,否则加在最后一列。
  2. Modify子句:修改指定列的数据类型。
  3. Alter子句:修改表中指定列的默认值,或者删除默认值。
  4. Chance子句:修改列名称。
  5. Drop子句:删除列或约束。

1.add实例

(1)向表中增加新列
输入:

use mytest
alter table user add 班级号 tinyint(1) null;
alter table user add column 班级号(测试) tinyint(1) null;
describe user;

(column 可加可不加,结果都一样)
输出:
MYSQL学习笔记(二)——数据库和数据表操作_第9张图片
(2)通过first | after列名指定增加列的位置,在user表的id后增加gender列
输入:

alter table user add gender tinyint(1) not null after id;
describe user;

输出:
MYSQL学习笔记(二)——数据库和数据表操作_第10张图片

2.modify实例

修改指定列的数据类型:把班级号的tinyint类型修改为bigint类型。
输入:

alter table user modify 班级号 bigint;
describe user;

输出:
MYSQL学习笔记(二)——数据库和数据表操作_第11张图片

3.实例练习

在student数据库中的xs表,增加“奖学金等级”一列,并将表中“班级号”列删除;
输入:

Use student;
Alter table xs add 班级号 tinyint(1) null;
Describe xs;

输出:
MYSQL学习笔记(二)——数据库和数据表操作_第12张图片
执行练习要求:增加删除各一列
输入:

Alter table xs
	Add 奖学金等级 tinyint null,
	Drop 班级号;
Describe xs;

输出:
MYSQL学习笔记(二)——数据库和数据表操作_第13张图片

4.更改表名

两种命令可以完成更改表名操作
(1) rename table语法格式:

rename table 老表名 to 新表名

实例: mytest数据库中的user_copy1表重命名为user1,user_copy2表重命名为user2。
输入:

use mytest;
show tables;
rename table user_copy1 to user1,user_copy2 to user2;
show tables;

输出:
MYSQL学习笔记(二)——数据库和数据表操作_第14张图片
(2) alter table用法
实例: 将user2表重命名为userb
输入:

alter table user2 rename to userb;
show tables;

输出:
MYSQL学习笔记(二)——数据库和数据表操作_第15张图片
此处 to 可以省略。
输入:

alter table userb rename userab;
show tables;

输出:
MYSQL学习笔记(二)——数据库和数据表操作_第16张图片

5.删除表

语法格式:

Drop table [if exsits] 表名

此命令会将表的描述、表的完整性约束、索引及表相关的权限等全部删除。
实例: 删除表userab
输入:

Drop table if exists userab;
Show tables;

输出:
MYSQL学习笔记(二)——数据库和数据表操作_第17张图片

三、表记录的操作

创建数据表后,需要对表中的数据记录进行操作。

(一)插入记录

1.插入新记录

语法格式:

Insert [into] 表名
	[(列名,)] values ({expr|default},)
	|set 列名={ expr|default },

说明:

  1. 列名:需要插入数据的列名。如果需要给全部列插入数据,列名可以省略。
  2. Values子句:包含各列需要插入的数据清单,数据的顺序要与列的顺序相对应。若没有给出列名,则要在values子句中给出每一列的值。如果列值为空,则值必须置为null,否则会出错。Values子句中的值有两个:
    (1)Expr:可以是一个常量、变量或一个表达式,也可以是空值null,其值的数据类型要与列的数据类型一致。当数据为字符型时要用单引号括起。
    (2)Default:指定为该列的默认值。前提是该列原先已经指定了默认值。如果列清单和values清单都为空,则insert会创建一行,每个列都设置成默认值。
  3. Set子句:set子句用于给列指定值。要插入数据的列名在set子句中指定,等号后面为指定数据。未指定的列,列值为默认值。

实例: 向student数据库的表xs(表中列包括学号、姓名、专业名、性别、出生日期、总学分、照片、备注)中插入如下一行:
081101,张三,计算机,1,1995-06-06,50,null,null

首先查看表里的具体情况
输入:

Use student;
Describe xs;

输出:
MYSQL学习笔记(二)——数据库和数据表操作_第18张图片
删除“奖学金等级”一列
输入:

Alter table xs
	Drop 奖学金等级;
Describe xs;

输出:
MYSQL学习笔记(二)——数据库和数据表操作_第19张图片
接下来就是重点了,往xs表中添加上述记录(三种方法)
输入:

insert into xs values('081101','张三','计算机',1,'1995-06-06',50,null,null);

输出:
在这里插入图片描述
或输入:

insert into xs (学号,姓名,专业名,性别,出生日期,总学分) values('081102','李四','软件工程',1,'1997-08-08',50);

输出:
在这里插入图片描述
又或输入:

insert into xs set 学号='081103',姓名='王五',专业名=default,性别=1,出生日期='1998-09-09',总学分=50;

输出:
在这里插入图片描述
可以看出三种方法都可以输入数据记录。
MYSQL学习笔记(二)——数据库和数据表操作_第20张图片
需要注意的是,如果原有行中存在PRIMARY KEY或UNIQUE KEY,而插入的数据行中含有与原有行中PRIMARY KEY或UNIQUE KEY相同的值,则INSERT语句无法插入此行。即主键值唯一,无法插入相同的值!

若输出后报错:
ERROR 1366 (HY000): Incorrect string value: ‘\xD5\xC5\xC8\xFD’ for column ‘姓名’ at row 1
在这里插入图片描述
原因数据库不支持中文字符,因此可以参考另外一篇博文
mysql永久支持中文字符解决办法(完整流程)
在解决之后如果仍然使用原来建立的数据库以上问题还会存在,因为在之前彻底解决了数据库支持中文字符的问题后,但由于原表是在解决之前建立的,因此表中的信息仍然不支持中文字符,我们可以查看该数据表的信息:
输入:

Show create table xs;

MYSQL学习笔记(二)——数据库和数据表操作_第21张图片
解决办法,删除该数据库,重新建立一个新的,此时的数据库就支持中文字符了!
输入:

Create database student;
Use student
create table xs
   (学号 char(6) not null primary key,
    姓名 char(8) not null,
    专业名 char(10) null,
    性别 tinyint(1) not null default 1,
    出生日期 date not null,
    总学分 tinyint(1) null,
    照片 blob null,
    备注 text null);
Show create table xs;

输出:
MYSQL学习笔记(二)——数据库和数据表操作_第22张图片
可以看出,新建立的表格已经支持中文字符了!

2.从已有表中插入新记录

快速从一个或多个已有的表记录向表中插入多行。
语法格式:

Insert [into] 表名 [(列名,)]
	Select 语句

说明:
select语句返回的是一个查询到的结果集,insert语句将这个结果集插入到指定表中,但要求结果集中的每行数据的字段数、字段的数据类型要与被操作的表完全一致。

实例: 将mytest数据库user表记录插入到user1表中。

先查看mytest数据库中的两个表数据记录情况。
输入:

Use mytest;
Show tables;
Select * from user;
Select * from user1;

输出:
MYSQL学习笔记(二)——数据库和数据表操作_第23张图片
执行插入数据记录要求
输入:

Insert into user1 select * from user;

输出:
MYSQL学习笔记(二)——数据库和数据表操作_第24张图片
因此需要删除两个属性“班级号”、“班级号(测试)”,刚好复习一下如何删除表中某一列属性。
输入:

Alter table user drop 班级号;
Alter table user drop 班级号(测试);

输出:
MYSQL学习笔记(二)——数据库和数据表操作_第25张图片
输入:

Alter table user drop gender;

输出:
在这里插入图片描述
(Mysql同时删除多列需要使用多个drop!)
此时再输入:

Insert into user1 select * from user;

就成功了!
输出:
MYSQL学习笔记(二)——数据库和数据表操作_第26张图片

3.插入图片

MYSQL中插入图片一般用插入图片的存储路径大方式来操作,也可以直接插入图片本身(用load_file函数)。
实例: 向学生表中插入一行记录(包含图片)。
输入:

Use student;
mysql> insert into xs values('081104','程明','计算机',1,'1995-02-01',50,'C:\Users\ks\Desktop\中大校徽壁纸.jpg',null);
insert into xs values('081105','陈明','计算机',1,'1995-03-01',50,load_file('C:\Users\ks\Desktop\中大校徽壁纸.jpg') ,null);

输出:
在这里插入图片描述
在这里插入图片描述
但是一般不建议把图片存储在数据库中。
输出结果如图:
MYSQL学习笔记(二)——数据库和数据表操作_第27张图片

(二) 修改记录

1.替换旧纪录

使用replace语句,可以在插入数据之前将与新记录冲突的旧记录删除,从而使新记录能够替换旧记录,正常插入,replace语句格式与insert语句相同。
实例: 在xs表中将张三的总学分修改为48分。
若使用insert语句,会报错(主键值唯一,不可以重复插入,要重新插入需要将冲突的记录删除)
在这里插入图片描述
使用replace语句,则可以成功插入
输入:

replace into xs
     values('081101','张三','计算机',1,'1995-06-06',48,null,null);

输出:
在这里插入图片描述
MYSQL学习笔记(二)——数据库和数据表操作_第28张图片

2.修改单个表

语法格式:

Update [low_priority] [ignore] 表名
	Set 列名 1 =expr1 [,列名2 = expr2…]
	[where 条件]

注意:
若语句中不设定where语句(可以指定删除记录条件),则更新所有行。列名1、列名2…为要修改列,列值为expr。expr可以是常量、变量、列名或表达式。可以同时修改所在数据行的多个列值,中间用逗号隔开。

实例: 将student数据库中的xs表中的所有学生的总学分都增加10分,将姓名为“陈明”的同学的备注填写为“辅修计算机专业”,学号改为“081250”

先查看原表信息
输入:

use student
select * from xs;

输出:
MYSQL学习笔记(二)——数据库和数据表操作_第29张图片
执行题目操作
输入:

update xs
set 总学分 = 总学分 + 10;
update xs
     set 学号 = '081250',备注 = '辅修计算机专业'
     where 姓名 = '陈明';
select 学号,姓名,总学分,备注 from xs;

输出:
MYSQL学习笔记(二)——数据库和数据表操作_第30张图片

3.修改多个表

语法格式:

Update 表名,表名…
	Set 列名1=expr1 [,列名2=expr2…]
	[where 条件]

实例: mytest数据库中的user表和user1表中均有两个字段id int(1)、password varchar(10),其中id为主键。当user表中的id值和user1表中id值相同时,将user中对应的password值修改为“11111111”,将user1中对应的password值修改为“22222222”。

查看user和user1表中的信息
输入:

use mytest
show tables;

输出:
MYSQL学习笔记(二)——数据库和数据表操作_第31张图片
输入:

select * from user;
select * from user1;

输出:
MYSQL学习笔记(二)——数据库和数据表操作_第32张图片
执行题目操作
输入:

update user,user1
    set user.password = '11111111',user1.password = '22222222'
where user.id = user1.id;
select * from user;
select * from user1;

输出:
MYSQL学习笔记(二)——数据库和数据表操作_第33张图片

(三)删除记录

Delete语句或truncate table语句都可以用于删除表中的一行或多行

1. 删除满足条件的行

从单个表中删除的语法格式:

Delete from 表名 [where 条件]

说明:
from 语句用于用于从何处删除数据,表名为要删除数据的表名。Where 语句指定删除记录的条件。如果省略则删除该表的所有行。

实例: 删除mytest数据库中user1表的“Jack”记录
输入:

delete from user1
    where username = 'Jack';

输出:
MYSQL学习笔记(二)——数据库和数据表操作_第34张图片

2. 从多个表中删除行

语法格式:

Delete [low_priority] [quick] [ignore] 表名[.*][,表名[.*]]
	From table_references
	[where where_definition]

Delete [low_priority] [quick] [ignore]
	From表名[.*][,表名[.*]]
	Using table_references
[where where_definition]

说明:
对于第一种语法,只删除列于from子句之前的表中对应的行;对于第二种语法,只删除列于from子句之中(在using子句之前)的表中对应的行。作用是可以同时删除多个表中的行,并使用其他的表进行搜索。

实例: 删除mytest数据库中user中id值等于user1的id值的所有行和user2中id值等于user的id值的所有行(同时满足两个条件)。

由于mytest数据库中user2表之前被删除,这里直接复制user表建立user2表。
输入:

create table user2 as(select * from user);
select * from user2;

输出:
MYSQL学习笔记(二)——数据库和数据表操作_第35张图片
输入:

delete user1,user2
    from user1,user2,user
where user1.id = user.id and user2.id = user.id;
select * from user1;
select * from user2;

先给出原表格信息:
MYSQL学习笔记(二)——数据库和数据表操作_第36张图片
MYSQL学习笔记(二)——数据库和数据表操作_第37张图片
MYSQL学习笔记(二)——数据库和数据表操作_第38张图片
满足user的id同时等于user1和user2的只有id为1(username为“Tom”),因此输出的结果应该是user1表为空表,user2表中删除了第一行(id =1)。
输出结果为:
MYSQL学习笔记(二)——数据库和数据表操作_第39张图片

3.清除表记录

使用truncate table语句将删除指定表中的所有数据且无法恢复,因此使用时必须谨慎!
语法格式:

Truncate table 表名

说明:
truncate 和 delete删除所有记录功能相同,但truncate比delete速度快,且使用系统和事务日志资源少。

(参考《mysql数据库教程》郑阿奇主编)

你可能感兴趣的:(MYSQL)