MYSQL之SQL基础语句笔记

密码找回

首先在mysql配置文件my.cnf中,添加下面跳过密码验证语句,保存退出,并重启数据库。

skip-grant-tables

然后无密码登录mysql,重新使用下面命令设置root用户密码。

mysql> UPDATE mysql.user SET authentication_string=password('new_password') WHERE user='root' AND host='localhost';
mysql> flush privileges;	#刷新权限

将配置文件中跳过密码验证语句注释并保存,然后重启服务,使用新密码登陆即可。

mysql数据类型

分为三类:数值类型、字符串类型】时间和日期类型

  1. 数值类型
    整数类型:TINYINT、LLINT、MEDUIMINT、INT、BIGINT;
    作用:用于存储用户的年龄、游戏的Level、经验值等。
    在这里插入图片描述
    浮点数类型:FLOAT DOUBLE
    作用:用于存储用户的身高、体重、薪水等;
    float(5.3) 宽度5,精度3,宽度不算小数点
    在这里插入图片描述
    定点数类型:DEC
    定点数在MYSQL内部以字符串形式存储,比浮点数的更精准,适合用来表示货币等高精度数据;
    位类型:BIT
    BIT(M)可以用来存放多位二进制数,M范围从1~64,如果不写默认为1;

  2. 字符串类型

    char表示定长字符串,长度是固定的;如果插入数据的长度小于char的固定长度时,则用空格填充;因为长度固定,所以存取速度要比varchar快很多,甚至能快50%,但正因为其长度固定,所以会占据多余的空间。
    varchar表示可变长字符串,长度是可变的;插入的数据是多长,就按照多长来存储;varchar在存取方面与char相反,它存取慢,因为长度不固定,但正因如此,不占据多余的空间。
    结合性能角度(char更快),节省磁盘空间角度(varchar更小),具体情况还需具体来设计数据库才是妥当的做法。

    CHAR系列 CHAR VARCHAR
    TEXT系列 TINYTEXT TEXT MEDIUMTEXT LONGTEXT
    BLOB系列 TINYBLOB BLOB MEDIUMBLOB LONGBLOB
    BINARY系列 BINARY VARBINARY
    枚举类型 ENUM
    集合类型 SET

    在这里插入图片描述
    枚举类型:枚举可以把一些不重复的字符串存储成一个预定义的集合;

  3. 日期类型
    时间和日期类型:year、date、time、datetime、timestamp
    户的注册时间,文章的发布时间,文章的更新时间,员工的入职时间等
    注意事项:
    插入年份时,尽量使用4位值
    插入两位年份时:
    <=69,以20开头,比如65, 结果2065;>=70,以19开头,比如82,结果1982
    在这里插入图片描述

timestamp 类型的列还有个特性:默认情况下,在 insert, update 数据时,timestamp 列会自动以当前时间(CURRENT_TIMESTAMP)填充/更新。“自动”的意思就是,你不去管它,MySQL 会替你去处理。

库操作

系统数据库
information_schema: 虚拟库,主要存储了系统中的一些数据库对象的信息,例如用户表信息、列信息、权限信息、字符信息等
performance_schema: 主要存储数据库服务器的性能参数
mysql: 授权库,主要存储系统用户的权限信息
sys: 主要存储数据库服务器的性能参数

  1. 创建数据库:DDL
    mysqladmin -u root -p1 password ‘123’
    mysql -u root -pQianFeng@123 -e “show databases”
    mysql -u root -pQianFeng@123 -e “create database sipeng”
    mysql> create database dname;
    数据库命名规则:区分大小写、唯一性、不能使用关键字如 create select、不能单独使用数字;
  2. 查看数据库
    mysql> show databases;
    mysql> show create database xingdian;
    mysql> select database(); 查看当前所在的库
  3. 切换数据库
    mysql> use xingdian;
    mysql> show tables;
  4. 删除数据库
    DROP DATABASE 数据库名;

表完整性约束

作用:用于保证数据的完整性和一致性

约束条件 说明
PRIMARY KEY (PK) 标识该字段为该表的主键,可以唯一的标识记录,不可以为空 UNIQUE + NOT NULL
FOREIGN KEY (FK) 标识该字段为该表的外键,实现表与表之间的关联
NULL 标识是否允许为空,默认为NULL。
NOT NULL 标识该字段不能为空,可以修改。
UNIQUE KEY (UK) 标识该字段的值是唯一的,可以为空,一个表中可以有多个UNIQUE KEY
AUTO_INCREMENT 标识该字段的值自动增长(整数类型,而且为主键)
DEFAULT 为该字段设置默认值
UNSIGNED 无符号,正数

表操作

  1. 创建表

    create table 表名 (字段 类型 [宽度 约束条件]), (字段 类型 [宽度 约束条件]) 存储引擎 default charset=8(字符集);

  2. 查看表

    select 字段 from 表名; #查看表数据
    DESC 表名; show create table 表名; #查看表结构

  3. 插入数据

    insert into 表名[字段] values(值),(值)
    可以指定字段插入数据,也可以按照顺序依次插入;可以只赋值一次,也可以同时赋值多次值;如果是字符串大家一定要用引号 enum: ‘a’ set: ‘dog’ ‘dog,pig’

  4. 修改表

    增加字段 
    alter table 表名 add 字段 类型 约束条件,add 字段 类型 约束条件 first(after id)
    修改表名
    alter table 旧表名 rename 新表名;
    修改字段名 
    alter table 表名 change 旧字段名 新字段名 旧类型 旧约束条件
    修改字段 
    alter table 表名 change 旧字段名 新字段名 新类型 新约束条件
    alter table 表名 modify 字段 类型 约束条件

  5. 复制表

    create table 新表名 select * from 旧表名  复制表结构和值,但是不复制主键
    create table 新表名 select * from where 1=2  假条件 复制表结构,不复制主键
    create table 新表名 like 旧表名 只复制表结+主键

  6. 删除

    删除字段 
    alter table 表名 drop 字段名;
    删除表
    drop table 表名;
    删除数据
    delete from 表名 where id=1 删除数据需要进行匹配删除

  7. 更新表

    update 表名 set 字段=‘修改后的值’ where id=1; 匹配的内容具有唯一性 (unique + not null )

数据查询

简单查询:

select 字段名1,字段名2 from 表名 条件

select * from 表名 ;
select * from 表名 where 查询条件;

DISTINCT 避免重复,通常仅用于某一个字段

select distinct 字段名 from 表名 ;
例:select distinct columnname from tablename

通过四则运算查询

SELECT name, salary, salary*14 FROM employee5;

定义显示格式

CONCAT() 函数用于连接字符串
例:SELECT concat(name, 's annual salary: ', salary*14) AS Annual_salary FROM employee5;

多条件查询
AND、OR

例:SELECT name,salary FROM employee5 WHERE post=‘hr’ AND salary>10000;
select * from employee5 where salary>5000 and salary<10000 or dep_id=102;

关键字BETWEEN AND

例:SELECT name,salary FROM employee5 WHERE salary BETWEEN 5000 AND 15000;

关键字IS NULL

例:SELECT name,job_description FROM employee5 WHERE job_description IS NULL;

关键字IN集合查询

例:
SELECT name, salary FROM employee5 WHERE salary IN (4000,5000,6000,9000) ;
SELECT name, salary FROM employee WHERE salary NOT IN (4000,5000,6000,9000) ;

关键字LIKE模糊查询;通配符’% ’:所有字符;通配符’_’ 一个字符

SELECT * FROM employee5 WHERE name LIKE ‘al%’;
SELECT * FROM employee5 WHERE name LIKE ‘al___’;

排序查询 order by 、asc(升序)、desc(降序)

例:
select china from t1 order by china;(默认升序,asc可不写)
select china from t1 order by china desc;

分组查询:
GROUP BY和GROUP_CONCAT()函数一起使用

例:部门ID相同,就把名字拼到一起
SELECT dep_id,GROUP_CONCAT(name) FROM employee5 GROUP BY dep_id;

GROUP BY和集合函数一起使用

例:部门最高薪资
SELECT post,max(salary) FROM employee5 GROUP BY post;

HAVING:
where是一个约束条件,在查询数据库结果返回之前对查询条件进行约束,即并由于where的执行顺序在聚合函数之前,所以where后面不能使用聚合函数;
having是在查询数据库结果返回之后进行过滤,即在结果返回值后起作用,having一般必须用在group by后面,having后面可以跟聚合函数。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值