首页 / MYSQL / MySQL 学习日记(2)
MySQL 学习日记(2)
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了MySQL 学习日记(2),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含6382字,纯文字阅读大概需要10分钟。
内容图文
![MySQL 学习日记(2)](/upload/InfoBanner/zyjiaocheng/859/e5928fb72f2c48a5b6de2cbba3790cad.jpg)
DML 语言
DML:数据操作语言,包括插入、修改、删除。
插入语句
# 方式1:经典插入
/*
语法: insert into 表名(字段名,...) values(值,...);
特点:
1、要求值的类型和字段的类型兼容
2、字段的个数和顺序不一定与原始表中的字段个数和顺序一致,但必须保证值和字段一一对应。
3、对于表中为null的字段,可以通过以下两种方式插入null
① 字段和值都省略
② 字段写上,值使用null
4、字段和值的个数都一致
5、字段名可以省略,默认所有列
*/
SELECT * FROM beauty;
# 1、插入的值要与列的类型一致或兼容
INSERT INTO beauty(id,NAME,sex,borndate,phone,photo,boyfriend_id)
VALUES(13,'唐艺昕','女','1990-4-23','1898888888',NULL,2);
# 2、不可以为null的列必须插入值,可以为null的列插入null值的两种方式
# 方式一
INSERT INTO beauty(id,NAME,sex,borndate,phone,photo,boyfriend_id)
VALUES(13,'唐艺昕','女','1990-4-23','1898888888',NULL,2);
# 方式二
INSERT INTO beauty(id,NAME,sex,phone)
VALUES(15,'娜扎','女','1388888888');
# 3、列的顺序可以调换
INSERT INTO beauty(NAME,sex,id,phone)
VALUES('蒋欣','女',16,'110');
# 4、列和值的个数必须一致
INSERT INTO beauty(NAME,sex,id,phone)
VALUES('关晓彤','女',17,'110');
# 5、可以省略列名,默认所有列,列的顺序和表中列的顺序一致
INSERT INTO beauty
VALUES(18,'张飞','男',NULL,'119',NULL,NULL);
# 6、可以一次插入多行
INSERT INTO beauty
VALUES(19,'张三','男',NULL,'119',NULL,NULL),
(20,'李四','男',NULL,'119',NULL,NULL);
# 7、支持子查询
INSERT INTO beauty(id,NAME,phone)
SELECT id+20,boyname,'1234567' FROM boys WHERE id<3;
/*
方式2:
insert into 表名
set 列名=值,列名=值....
*/
修改语句
# 修改单表记录
/*
语法:
update 表名 set 列=新值,列=新值... where 筛选条件
*/
#案例1:修改beauty表中姓唐的女神的电话为13899888899
UPDATE beauty SET phone = '13899888899'
WHERE NAME LIKE '唐%';
删除语句
/*
方式1:delete
1、单表删除
delete from 表名 where 筛选条件
2、多表删除
sql92:
delete 表1,表2
from 表1,表2
where 连接条件
and 筛选条件
sql99:
delete 表1,表2
from 表1
inner|left|right join 表2 on 连接条件
where 筛选条件
*/
#1.单表的删除
#案例:删除手机号以9结尾的女神信息
DELETE FROM beauty WHERE phone LIKE '%9';
SELECT * FROM beauty;
#2.多表的删除
#案例:删除张无忌的女朋友的信息
DELETE b
FROM beauty b
INNER JOIN boys bo ON b.`boyfriend_id` = bo.`id`
WHERE bo.`boyName`='张无忌';
/*
方式2:truncate
truncate table 表名;
两种方式的区别
1.delete 可以加where 条件,truncate不能加
2.truncate删除,效率高一点
3.假如要删除的表中有自增长列,
如果用delete删除后,再插入数据,自增长列的值从断点开始,而truncate删除后,再插入数据,自增长列的值从1开始。
4.truncate删除没有返回值,delete删除有返回值
5.truncate删除不能回滚,delete删除可以回滚.
*/
DDL 语言
数据定义语言
数据库的管理
# 创建表
/*
语法:
create database [if not exists] 库名 [character set 字符集名]
*/
# 案例: 创建库 Books
CREATE DATABASE IF NOT EXISTS books;
# 修改库
/*
语法: alter database 库名 charater set 字符集名
*/
# 案例: 更改库的字符集
ALTER DATABASE books CHARACTER SET gbk;
# 删除库
/*
drop database [if exists] 库名
*/
# 案例: 库的删除
DROP DATABASE IF EXISTS books;
表的管理
表的创建
/*
语法:
create table 表名(
列名 列的类型[(长度) 约束],
列名 列的类型[(长度) 约束]
....
*/
# 案例1:创建表book
CREATE TABLE book (
# 编号
id INT,
# 图书名
bName VARCHAR(20),
# 价格
price DOUBLE,
# 作者编号
authorId INT,
# 出版日期
publishDate DATETIME
);
# 案例2:创建表author
CREATE TABLE IF NOT EXISTS author(
id INT,
author_name VARCHAR(20),
nation VARCHAR(10)
);
表的修改
/*
1、添加列
alter table 表名 add column 列名 类型 [first|after 字段名]
2、修改列的类型或约束
alter table 表名 modify column 列名 新类型 [新约束]
3、修改列名
alter table 表名 change column 旧列名 新列名 类型
4、删除列
alter table 表名 drop column 列名;
5、修改表名
alter table 表名 rename [to] 新表名
*/
# 案例1,修改列名
ALTER TABLE book CHANGE COLUMN publishDate pubDate DATETIME;
# 案例2,修改列的类型或约束
ALTER TABLE book MODIFY COLUMN pubDate TIMESTAMP;
# 案例3,添加新列
ALTER TABLE author ADD COLUMN annual DOUBLE;
# 案例4,删除列
ALTER TABLE author DROP COLUMN annual;
# 案例5,修改表名
ALTER TABLE author RENAME TO book_author;
表的删除
/*
表的删除
drop table [if exists] 表名;
*/
案例:
DROP TABLE IF EXISTS book_author;
复制表
/*
复制表
1、复制表的结构
create table 表名 like 旧表;
2、复制表的结构+数据
create table 表名
select 查询列表 from 旧表 [where 筛选]
*/
CREATE TABLE IF NOT EXISTS author(
id INT,
author_name VARCHAR(20),
nation VARCHAR(10)
);
INSERT INTO author VALUES
(1,'村上春树','日本'),
(2,'莫言','中国'),
(3,'冯唐','中国'),
(4,'金庸','中国');
# 1、仅复制表的结构
CREATE TABLE copy LIKE author;
# 2、复制某些字段
CREATE TABLE copy2 SELECT id,author_name
FROM author;
数据类型
整型
分类
TINYINT 1B
SMALLINT 2B
MEDIUMINT 3B
INT/INTEGER 4B
BIGINT 8B
特点:
①默认为有符号,如果想要设置无符号,需要添加unsigned关键字
②如果插入的数值超出了整形的范围,会报out of range 异常,并且插入临界值
③若不设置长度会有默认的长度,代表显示的最大宽度
# zerofill 填充零,设置此值不能插入负数
CREATE TABLE tab_int (t1 INT (7) ZEROFILL, t2 INT (7) ZEROFILL);
DESC tab_int; # 查看表数据类型
INSERT INTO tab_int VALUES(-12345, 2321);
SELECT * FROM tab_int;
浮点型
/*
定点数: dec(M,D); decimal(M,D)
浮点数: float(M,D) 4; double(M,D) 8
特点:
1、M 代表整数部位+小数部位的个数,D代表小数部位
2、如果超出范围,报out or range异常,并且插入临界值
3、M和D都可省略,但是对于定点数,M默认为10,D默认为0
4、如果精度要求较高,优先考虑使用定点数
*/
DROP TABLE tab_float;
CREATE TABLE tab_float(f1 FLOAT,f2 DOUBLE,f3 DECIMAL);
INSERT INTO tab_float VALUES(0.2,-1.2,3.3);
SELECT * FROM tab_float;
字符型
/*
较短的文本:char、varchar
其他:
binary和varbinary用于保存较短的二进制
enum用于保存枚举
set用于保存集合
char(M):M表示最大的字符数,可以省略,默认为1,固定长度的字符,比较耗费
varchar(M):M表示最大的字符数,不可以省略,可变长度的字符,比较节省
*/
CREATE TABLE tab_char(
c1 ENUM('a','b','c')
);
INSERT INTO tab_char VALUES('a');
INSERT INTO tab_char VALUES('b');
INSERT INTO tab_char VALUES('c');
INSERT INTO tab_char VALUES('m');
INSERT INTO tab_char VALUES('A');
SELECT * FROM tab_char;
SELECT * FROM tab_set;
CREATE TABLE tab_set(
s1 SET('a','b','c','d')
);
INSERT INTO tab_set VALUES('a');
INSERT INTO tab_set VALUES('A,B');
INSERT INTO tab_set VALUES('a,c,d');
日期型
/*
date只保存日期;
time 只保存时间;
year只保存年;
datetime保存日期+时间;
timestamp保存日期+时间;
字节 范围 时区等的影响
datetime 8 1000-9999 不受
timestamp 4 1970-2038 受
*/
CREATE TABLE tab_date(
t1 DATETIME,
t2 TIMESTAMP
);
INSERT INTO tab_date VALUES(NOW(),NOW());
SELECT * FROM tab_date;
SHOW VARIABLES LIKE 'time_zone';
SET time_zone='+9:00';
约束条件
内容总结
以上是互联网集市为您收集整理的MySQL 学习日记(2)全部内容,希望文章能够帮你解决MySQL 学习日记(2)所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。
来源:【匿名】