MySQL基础语句

建库:create database test;
删库:drop database test;
选择数据库:use test;
数据类型:

数值类型大小说明
tinyint1字节小整数
smallint2字节
mediumint3字节
int 或者 integer4字节整数
bigint8字节极大整数
float4字节单精度浮点值
double8字节双精度浮点值

decimal(M,D) 如果M>D,为M+2,否则D+2,常用(10,2) 小数值(金额常用)

日期时间类型大小范围格式用途
date31000.01.01-9999-12-31YYYY-MM-DD日期值
time3‘-838:59:59’/‘838:59:59’HH:MM:SS时间值或持续值
year11901-2155YYYY年份值
datetime81000.01.01 00:00:00 – 9999.12.31YYYY-MM-DD HH:MM:SS混合日期和时间值
timestamp41970.01.01 – 2038YYYYMMDD HHMMSS混合日期和时间值,常用来做时间戳
字符串类型大小说明
char0 - 255定长字符串
varchar0 - 65535(216 - 1)变长字符串
tinytext0 - 255短文本字符串
text0 - 65535长文本数据
mediumtext0 - 16777215(224 - 1)中等长度文本数据
longtext0 - 4294967295(232 - 1)极大文本数据
建表:
CREATE TABLE IF NOT EXITS `table_name`(
	`id` INT UNSIGNED AUTO_INCREMENT,
    `name` VARCHAR(100) NOT NULL,
    `time` DATETIME,
    PRIMARY KEY (`id`)
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
  • 注释:
  • UNSIGNED:将数字类型无符号化;
  • AUTO_INCREMENT:定义该列为自增的属性;
  • PRIMARY KEY:设置主键,可以使用多列来定义主键,列间以逗号分隔;
  • ENGINE:设置存储引擎,CHARSET:设置编码。
删表:
  • 不需要该表时:drop table test;
  • 需要保留表,但是想清空记录:truncate teble test;
  • 删除部分记录:delete from table_name where name = '张三';
插入数据:
  • insert into table_name (id,name) values (value1,value2);
查询数据:
  • select id,name from table_name1[,table_name2] [where clause] [limit n] [offset m]
    • 可从一个表或者多个表查询
    • limit n:设定返回的记录数n
    • offset m:偏移量,可跳过m条数据,(不可单独使用)
    • limit n,m:相当于 limit m offset n:从第n条记录开始,返回M条记录。
Where语句:
  • 实例分析
  • 按由高到低的顺序显示个人平均分在70分以上的学生姓名和平均分,为了尽可能地提高平均分,在计算平均分前不包括分数在60分以下的成绩,并且也不计算小明(ming)的成绩。

  1. 显式学生姓名和平均分

    select name,avg(scorc) from tb_student

  2. 就算平均分不包括60分以下的成绩,也不包括小明的

    where score > 60 and name != 'ming'

  3. 显式个人平均分,同一个学生考了多门科目,因此按姓名分组

    group by name

  4. 显式个人平均分70分以上的

    having avg(score) >= 70

  5. 由高到低排序

    order by avg(score) desc

  • slect name,avg(score) from tb_student
    	where score > 60 and name != 'ming'
    	group by name
    	having avg(score) >= 70
    	order by avg(score) desc;
    
更新:
  • update table_name set name = 1,age = 20 where id = 15;
  • 可以同时更新一个或多个字段
  • 可以在where中制定任何条件
删除
  • delete from tb_student where id = 1;
    • delete:根据条件删除数据,可回滚,
    • truncate:清空表中的数据
    • drop: 清空表数据和表结构
关键字
like 子句
  • select * from books where name like '%java';

    %java :查询以 java结尾 的信息;

    java% :查询以 java开始 的信息;

    %java% :查询含有a的数据;

    _a_ :查询三位且中间字母是a的

    a_ :查询两位且 a 开头的

    _a :查询两位且 a结束的

union[all | distanct ]
  • 用于连接两个以上的 select 语句的结果组合到一个结果集中。
  • 多个 select 语句会删除重复的数据,所以 distinct 不用添加
  • all:可选,返回所有结果集,包含重复数据。
order by
  • 可设置多个字段作为排序条件
  • 默认升序,可以使用ASC(升序)或者DESC(降序)来设置排序
group by
  • 根据一个或多个列对结果集进行分组

  • 举个例子

    idnamedatesingin
    1小明2016-04-22 15:25:331
    2小王2016-04-20 15:25:473
    3小丽2016-04-19 15:26:022
    4小王2016-04-07 15:26:144
    5小明2016-04-11 15:26:404
    6小明2016-04-04 15:26:542
  • SELECT name, COUNT(*) FROM employee_tbl GROUP BY name;

  • 结果

    nameCOUNT(*)
    小丽1
    小明3
    小王2
join 连接
  • inner join(内连接,或等值连接):获取两个表中字段匹配关系的记录

  • left join(左连接):获取左表所有记录,即使右表没有对应匹配的记录

  • right join(右连接):与left join相反

NULL
  • is null
  • is not null
alter
  • 修改表名或修改数据表字段。

  • 举个栗子

    create teble test (
    	i int,
    	c char(1)
    	);
    
  • alter table test DROP i删除 test 表的 i 字段

  • alter table test ADD i INT :为 test 表添加 i 字段,并定义 数据类型
    (自动添加到数据库字段的末尾)

  • alter table test MODIFY c char(10): 修改 c 类型从 char(1) 改为 char(10)

  • alter table test CHANGE i j tinyint : 使用 change 关键字, 后面需要紧跟修改的字段名,然后指定新字段名类型

  • alter table test RENAME TO tt_name : 修改表名称

索引
  • //测试表
    create table test(
    	id int not null,
        name varchar(16) not null,
    )
    
添加
  • 普通索引:alter table test add index index_name(name)
  • 唯一索引:alter table test add unique index_name(name)
  • 主键索引:alter table test add primary key(name) 主键默认不为空
临时表
  • MySQL 临时表在我们需要保存一些临时数据时是非常有用的。临时表只在当前连接可见,关闭连接时,MySQL会自动删除表并释放所有空间。
复制表
  • 完全复制一个数据表的结构,索引,默认值等
    1. show create table test :获取数据表 test 的 完整结构
    2. 修改SQL 语句的数据表名称,执行 SQL 语句
    3. 拷贝数据:`insert into 新表 select * from 旧表
事务
  • 事务隔离级别
  1. 读未提交:存在脏读、不可重复读、幻读问题。
  2. 读已提交:解决了脏读问题;但依旧存在不可重复读、幻读的问题。
  3. 可重复读:解决了脏读、不可重复读的问题;存在幻读的。
  4. 可串行化:解决了以上三种问题。
  • 脏读: 当前事务读取了另一事务未提交的数据
  • 不可重复读:在同一个事务中,对某个数据多次查询,发现其值不是一致的(原因是,在查询间隔其被另一个事务修改并提交了)
  • 幻读:(更侧重于 select 结果的状态)比如:select 某记录是否存在,不存在,准备插入,但是在执行insert的时候发现存在了,无法插入。(当然了,也可以这么理解:select某记录是否存在,存在,准备修改其属性值,但是在执行update的时候,发现其不存在了,无法修改)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值