MySQL学习记录
DDL : 数据库定义语句(Datebase Define Language)
DML : 数据管理语句(Datebase Manage Language)
DQL : 数据库查询语言(Datebase Query Language)
数据库定义语句(Datebase Define Language)
-- DDL语句
SHOW DATABASES; -- 列出所有数据库
CREATE DATABASE `dailytext`; -- 创建数据库
DROP DATABASE `dailyText`; -- 删除数据库
USE `dailytext`; -- 更换数据库
SHOW TABLES; -- 列出数据表
CREATE TABLE IF NOT EXISTS `person` (
`id` INT AUTO_INCREMENT,
`name` VARCHAR(10) NOT NULL,
`age` INT,
`gender` ENUM ('man','woman','other'),
`bd` DATE,
PRIMARY KEY (`id`)
)ENGINE=INNODB ,CHARSET=utf8 ; -- 创建表
DESC person; -- 显示表结构
ALTER TABLE persons RENAME person; -- 重命名表名
ALTER TABLE person ADD gender VARCHAR(3) DEFAULT '男' COMMENT '性别'; -- 添加字段
ALTER TABLE `person` ADD `married` ENUM('yes','no') DEFAULT NULL first/after Column_Name; -- 指定位置添加字段
ALTER TABLE `person` MODIFY `married` VARCHAR(5) DEFAULT NULL; -- 只能修改字段属性以及字段长度
ALTER TABLE `person` CHANGE `married` `marry` VARCHAR(10) DEFAULT NULL; -- 修改字段名,字段属性以及字段长度
ALTER TABLE `person` DROP `marryy`; -- 删除字段
-- delete,drop,truncate 都有删除表的作用,区别在于:
/*
1、delete 和 truncate 仅仅删除表数据,drop 连表数据和表结构一起删除,打个比方,delete 是单杀,truncate 是团灭,drop 是把电脑摔了。
2、delete 是 DML 语句,操作完以后如果没有不想提交事务还可以回滚,truncate 和 drop 是 DDL 语句,操作完马上生效,不能回滚,打个比方,delete 是发微信说分手,后悔还可以撤回,truncate 和 drop 是直接扇耳光说滚,不能反悔。
3、执行的速度上,drop>truncate>delete,打个比方,drop 是神舟火箭,truncate 是和谐号动车,delete 是自行车。
*/
TRUNCATE TABLE `person`; -- 删除表内容,自增列计数器清空
DELETE TABLE `person`; -- 删除表内容,自增列计数器不清空
-- 若数据表使用InnoDB引擎,重启数据库后自增列会清零,数据保存在内存中
-- 若数据表使用MyISAM引擎,重启数据库后自增列也不会清零,数据保存在文件中
DROP TABLE `person`; -- 删除表内容和结构
数据管理语句(Datebase Manage Language)
-- DML语句
-- 添加一条数据
-- 方式一
INSERT INTO person
VALUES (NULL,'Mariya',12,'女');
-- 方式二
INSERT INTO person
(`name`,`age`,`gender`,`birthday`)
VALUES
('jicka',16,'女',NOW());
-- 修改一条数据
UPDATE person
SET `name`='Rick' ,`age`=13 , `gender`=DEFAULT
WHERE `name`='Mariya' OR `age`=12;
UPDATE person
SET age=50
WHERE `name`='Rick';
UPDATE person
SET `birthday`='1956-02-29' -- 设置时间格式为字符串
WHERE `name`='Rick';
UPDATE person
SET `birthday`=CURRENT_TIME
WHERE id>1 AND id <14;
-- 删除一条数据(自增列不清除,会继续原来的增加)
DELETE FROM `person`
WHERE `name`='Gazor';
数据库查询语言(Datebase Query Language)
-- DQL语句
-- 基本查询语句:
SELECT * FROM cartoon;
-- 连接查询
/*
内连接 :显示两表都有的内容,where和on无区别,应搭配on
语法:
select column_name
from A
inner join B
where/on A.column_name=B.column_name
*/
SELECT c.`name` 姓名,c.`married` 已婚,p.`age` 年龄,p.`gender` 性别1,c.`gender` 性别2
FROM `cartoon` c
INNER JOIN `person` p
ON c.`name` = p.`name`
ORDER BY c.`id`;
/* 左连接 :左表为主表(A),结果显示左表中全部信息,右表中不存在的字段名用 NULL 填充
语法:
select column_name
from A
left join B
on A.column_name=B.column_name
*/
SELECT p.`name` 姓名,p.`gender` 性别1,c.`gender` 性别2,c.`married` 已婚
FROM person p LEFT JOIN cartoon c
ON p.`name`=c.`name`;
/* 右连接 :右表为主表(A),结果显示右表中全部信息,左表中不存在的字段内容用 NULL 填充
语法:
select column_name
from A
right join B
on A.column_name=B.column_name
*/
SELECT p.`name` 姓名,p.`gender` 性别1,c.`gender` 性别2,c.`married` 已婚
FROM person p RIGHT JOIN cartoon c
ON p.`name`=c.`name`;
SELECT p.`name` 姓名,p.`gender` 性别1,c.`gender` 性别2,c.`married` 已婚
FROM cartoon c RIGHT JOIN person p
ON p.`name`=c.`name`; -- 此结果和上面左连接查询例子一致
SELECT p.`name` 姓名,p.`gender` 性别1,c.`gender` 性别2,c.`married` 已婚
FROM dailytext.`cartoon` c RIGHT JOIN shmebluk.`person` p
ON p.`name`=c.`name`; -- 可选择不同数据库的表连接,用 datebase.table_name 选择