MySQL 笔记

  • [] 为可选内容

1、基础命令

  1. mysql -uroot -p123456 连接数据库

  2. flush privilege 刷新权限

  3. show databases 查看所有的数据库

  4. use 数据库名; 切换数据库

  5. show tables; 查看数据库中的所有表

  6. describe 数据库名; 显示数据库所有表的信息

  7. create database; 数据库名 创建数据库

  8. exit 退出

  9. – 注释 /* / */

    SELECT select_list
      [ INTO new_table ]
      FROM table_source
      [ WHERE search_condition ] --满足条件
      **[ GROUP BY group_by_expression ] **–分组
      **[ HAVING search_condition ] ** --过滤分组的记录满足的次要条件
      **[ ORDER BY order_expression [ ASC | DESC ] ] ** --指定查询记录按一个或者多个条件排序

    [LIMIT {[offset.]row_count | row_contOFFSET offset }] --指定查询的记录从哪条至哪条

------

2、操作数据库

操作数据库>操作数据库中的表>操作数据库中表的数据

2.1、操作数据库

1、创建数据库

	CREATE DATABASE [IF NOT EXISTS] 数据库名;

2、删除数据库

	DROP DATABASE [IF EXISTS] 数据库;

3、使用数据库

USE 数据库名;(如果表名或者字段名是特殊字符,需要用 ``,目的防止表名高亮)
例如 SELECT `user` FROM student

4、查看数据库

	SHOW DATABASES;

学习思路:记住关键字即可

​ 对照sqlyog可视化工具历史记录查看sql

2.2、数据库的列类型

1.数值

int 标准的整数 4字节

​ float 浮点数 4字节

​ double 浮点数 8字节

​ decimal 字符串形式的浮点数 金融计算时使用

2.字符串

​ char 字符串固定大小 0-255

varchar 可变字符串 0-65535 String

​ tinytext 微型文本 2^8-1

​ text 文本串 保存大文本

3.时间日期

​ java.util.Date

​ data YYY-MM-DD 日期格式

​ time HH:mm:ss 时间格式

datatime YYY-MM-DD HH:mm:ss

​ timestamp 时间戳 全球统一 1970.1.1到现在

​ year 年份

4.NULL

​ 没有值,未知

​ 不要使用NULL运算,结果也为NULL

2.3 数据库的字段属性(重点)

​ Unsigned: 无符号整数 声明了该列不能声明负数

​ zerofill:0填充的 不足的位数,使用0填充,int(3)

​ 非空:NULL not null 不填值时默认为null

​ 自增: 设计唯一主键index

​ 默认:设置默认的值!

​ sex :默认为男

2.4、创建数据库表(重点)

CREATE TABLE IF NOT EXISTS 'student'(
    `id` int(4) NOT NULL AUTO_INCREMENT COMMENT '学号', -- AUTO_INCREMANT自增
    `name` VARCHAR(30) NOT NULL DEFAULT '匿名' COMMENT '姓名',
    `pwd` VARCHAR(20) NOT NULL DEFAULT '123456' COMMENT '密码',
    `sex` VARCHAR(2) NOT NULL DEFAULT '女'  COMMENT '性别’,
    `birthday` DATETIME DEFAULT NULL COMMENT '出生日期',
    `address` VARCHAR(100) DEFAULT NULL COMMENT '地址',
    PRIMARY KEY('id') --主键
)ENGINE=INNODB DEFAULT CHARSET=utf8
CREATE TABLE [IF NOT EXISTS] '表名' (
'字段名' 列类型 [属性] [索引] [注释],
)[表类型][字符集设置][注释]
SHOW CREATE DATABASE school -- 查看创建数据库语句
SHOW CREATE TABLE student -- 查看student表的定义语句
DESC student -- 显示表的结构

2.5、数据表的类型

--关于数据库引擎
/*
INNODB 默认使用
MYISAM 早些年使用
*/
MYISAM INNODB
事务支持 不支持 支持
数据行锁定 不支持 支持
外键约束 不支持 支持
全局索引 支持 不支持
内存大小 较小 是MYISAM的2倍

MYISAM 节约空间,速度较快

INNODB 安全性高,事务的处理,多表多用户操作

物理层面:

​ MYISAM:有*.frm,.MYD数据文件(data),.MYI数据索引文件(index)
INNODB: 只有*.frm

​ 偷懒技巧:

​ show CREATE database 数据库名

​ DESC 表名 --显示表的结构

2.6、修改删除表

​ 修改

  • ALTER TABLE 旧表名 RENAME AS 新表名

​ 修改表的字段

  • ALTER TABLE 表名 MODIFY 字段名 列属性[] --修改约束

​ 删除表的字段

  • ALTER TABLE 表名 DROP 字段名

​ 删除表

  • DROP TABLE IF EXISTS 表名

3、MySQL数据管理

3.1、外键(了解)

一个表的非主键与其他表的列属性相关联
一般不在数据库使用,造成数据库过多造成困扰
想使用多表数据,在程序中使用

3.2、DML语言(重点)

数据库的意义:数据存储,数据管理
DML语言:数据操作语言

3.3、添加

--插入语句(添加)
INSERT INTO 表名称 VALUES (1,2,....)	--值1,值2是按顺序执行
ex:INSERT INTO Persons VALUES ('Gates', 'Bill', 'Xuanwumen 10', 'Beijing')
INSERT INTO table_name (1,2,...) VALUES (1,2,....)	--指定表列插入
ex:INSERT INTO Persons (LastName, Address) VALUES ('Wilson', 'Champs-Elysees')
INSERT INTO table_name (1,2,...) VALUES (1),(2,....)	--多行表列插入
ex:INSERT INTO Persons (LastName, Address) VALUES ('Wilson',`Bill`,`Beijing`),('Champs-Elysees',`nihao`,`da`)

3.4、修改

Update命令
--语句用于修改表中的数据
UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值
ex:UPDATE Person SET FirstName = 'Fred' WHERE LastName = 'Wilson' 
--若无指定条件将修改所有表

--多属性修改
UPDATE Person SET Address = 'Zhongshan 23', City = 'Nanjing'
WHERE LastName = 'Wilson'

3.5、删除

delete命令
--DELETE 语句用于删除表中的行
DELETE FROM 表名称 WHERE 列名称 = 值
ex:DELETE FROM Person WHERE LastName = 'Wilson' 

--清空表truncate
TRUNCATE `表名`

deletetruncate的区别
相同点:都可以删除数据,不会删除表结构
不同:truncate 重新设置,自增列 计数器归零,不会影响事物
delete清空后 计数器不会归零

DELETE删除的问题,重启数据库,计数器重新归零
 - InnoDB 自增列会重1开始(存在内存当中,断电即失)
 - MyISAM 继续从上一个自增量开始(存在文件中的,不会丢失)

4、DQL查询数据(最重点)

4.1、DQL (Data Query Language)

  • 所有的查询操作都用它 Select

  • 核心语言,使用频率最高

4.2、指定查询字段

select语法

SELECT 列名称 FROM 表名称

--函数 concat(a,b) 连接a,b的内容
SELECT CONCAT('姓名:',StudentName) AS 别名 FROM student

–为了方便查看,给列名起一个名字 AS

SELECT 列名称 AS 别字,列名称 AS 别字 FROM 表名称

去重 DISTINCT

SELECT DISTINCT `student` FROM result

4.3where 条件子句

作用:检索数据中符合条件的值

搜索的条件由一个或者多个表达式组成,结果为布尔值。

%(代表0到任意字符)

_ (代表一个字符)

SELECT `student` FROM `student` WHERE student LIKE '刘_'
运算符 语法
and && a and b a&&b
or || a or b a||b
Not ! not a !a

模糊查询:比较运算符

运算符 语法
IS NULL a is null
IS NOT NULL a is not null
BETWEEN a between b and c
Like(可以使用% 和_ 通配符) a like b
IN(具体的值) a in (a1,a2,a3)

查询地址为空

WHERE address = '' OR address IS NULL

你可能感兴趣的:(数据库)