Mysql基础(一)
创建数据库create database if not exits 'databasename';删除数据库drop databasename;选择数据库use databasename;创建表create table tablename(column_name column_type);删除表drop table table...
创建数据库
create database if not exits 'databasename';
删除数据库
drop databasename;
选择数据库
use databasename;
创建表
create table tablename(column_name column_type);
删除表
drop table tablename;
插入数据
insert tablename (filed,...) values (values1,...);
or
insert tablename (values1,values2,..);
如果某个属性被设置为自增,那么插入时令该元素为null或者为0,可以达到自增效果
查询数据
select column_name,columb_name from table where ()
where句子
select field1,filed2 from table_name1,table_name2 where condition1 and|or condition2;
update句子
update table_name set filed=new-value,field1=new-fileld where condition;
注意用set
delete句子
delete from table_name where condition;
like句子
后面跟正则表达式
select field1,field2 from table_name where field like condition
eg:
select name from student where name like '%wang'
选择出名字中含有wang的所有姓名
union句子
select field1,field2 from table1 union (all|distinct) union select field3,field4
union两边的属性的个数要相等
排序
select field1,field from table_name1,table_name2 order by field1 [,field2] [asc|desc]
分组:
select field1,function(filed1) from table_name group by field with rollup
如果有重复的,group by的时候去第一个该属性的其他属性
使用with rollup对function(filed1)产生总和,想让总和的属性名称不为null,使用coalesce(xx,’name’)
连接:
- INNER JOIN(内连接,或等值连接):获取两个表中字段匹配关系的记录。
- LEFT JOIN(左连接):获取左表所有记录,即使右表没有对应匹配的记录。
- RIGHT JOIN(右连接): 与 LEFT JOIN 相反,用于获取右表所有记录,即使左表没有对应匹配的记录。
关于NULL
- IS NULL: 当列的值是 NULL,此运算符返回 true。
- IS NOT NULL: 当列的值不为 NULL, 运算符返回 true。
- <=>: 比较操作符(不同于=运算符),当比较的的两个值为 NULL 时返回 true。
正则表达式
模式 | 描述 |
---|---|
^ | 匹配输入字符串的开始位置。如果设置了 RegExp 对象的 Multiline 属性,^ 也匹配 ‘\n’ 或 ‘\r’ 之后的位置。 |
|匹配输入字符串的结束位置。如果设置了RegExp对象的Multiline属性, | 匹 配 输 入 字 符 串 的 结 束 位 置 。 如 果 设 置 了 R e g E x p 对 象 的 M u l t i l i n e 属 性 , 也匹配 ‘\n’ 或 ‘\r’ 之前的位置。 | |
. | 匹配除 “\n” 之外的任何单个字符。要匹配包括 ‘\n’ 在内的任何字符,请使用象 ‘[.\n]’ 的模式。 |
[…] | 字符集合。匹配所包含的任意一个字符。例如, ‘[abc]’ 可以匹配 “plain” 中的 ‘a’。 |
[^…] | 负值字符集合。匹配未包含的任意字符。例如, ‘[^abc]’ 可以匹配 “plain” 中的’p’。 |
p1|p2|p3 | 匹配 p1 或 p2 或 p3。例如,’z|food’ 能匹配 “z” 或 “food”。’(z|f)ood’ 则匹配 “zood” 或 “food”。 |
* | 匹配前面的子表达式零次或多次。例如,zo* 能匹配 “z” 以及 “zoo”。* 等价于{0,}。 |
+ | 匹配前面的子表达式一次或多次。例如,’zo+’ 能匹配 “zo” 以及 “zoo”,但不能匹配 “z”。+ 等价于 {1,}。 |
{n} | n 是一个非负整数。匹配确定的 n 次。例如,’o{2}’ 不能匹配 “Bob” 中的 ‘o’,但是能匹配 “food” 中的两个 o。 |
{n,m} | m 和 n 均为非负整数,其中n <= m。最少匹配 n 次且最多匹配 m 次。 |
事务
一般来说,事务是必须满足4个条件(ACID)::原子性(**A**tomicity,或称不可分割性)、一致性(**C**onsistency)、隔离性(**I**solation,又称独立性)、持久性(**D**urability)。
- 原子性:一个事务(transaction)中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节。事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样。
- 一致性:在事务开始之前和事务结束以后,数据库的完整性没有被破坏。这表示写入的资料必须完全符合所有的预设规则,这包含资料的精确度、串联性以及后续数据库可以自发性地完成预定的工作。
- 隔离性:数据库允许多个并发事务同时对其数据进行读写和修改的能力,隔离性可以防止多个事务并发执行时由于交叉执行而导致数据的不一致。事务隔离分为不同级别,包括读未提交(Read uncommitted)、读提交(read committed)、可重复读(repeatable read)和串行化(Serializable)。一个事务对数据进行操作时,另一个事务不可以对事务进行操作,并发执行事务的时候保证只有一个事务对数据进行处理。
- 持久性:事务处理结束后,对数据的修改就是永久的,即便系统故障也不会丢失。
begin;
xx
xx
commit;
begin;
xxx
xxx
roll back;
Alter
添加字段:
alter table table_name add filed filed_attr;
删除字段
alter table table_name drop filed;
修改字段类型
alter table table_name modify field new_field_attr;
修改字段:
alter table table_name change field new_field new_filed_attr;
修改属性的NULL:
alter table table_name modify field filed_attr not null;
若果报错了,可能是因为对象里面有属性的值为NULL,把这些属性的值先改掉就可以修改成not null了
修改默认值
alter table table_name alter filed set default xx;
修改字段的顺序:
alter table table_name modify field1 filed1_attr first|after field2 filed2_attr
修改表名;
alter table old_table_name rename to new_table_name;
删除主键约束:
alter table table_name drop primary key;
1、属性里面有自增元素是,插入的时候令该属性的值为0或者NUll就可以自动增加
2、对于union函数
select A,B from table_1 union select c,d from table_2;
A会和c合并,B会和d合并
select左右两边的属性个数必须相同
索引
没有索引时,查找某个filed=xx时,mysql会加载整个表,然后处理所有的row,如果在filed上加上索引,那么至于加载和处理文件的一部分。但增加索引在提升查询速度的同时,也增加了存储开销。
创建索引
create index index_name on table_name(filed_name(longth))
后续会详细讲解
临时表
只在当前会话中显示,退出后被自动销毁
create temporary table XXX;
复制表
方法一:
show create table table_name \g;
显示创建表的所有语句 ,复制粘贴改表名即可
方法二:
create table target_table like source_table;
insert into target_table select * from source_table;
元数据
SELECT VERSION( ) | 服务器版本信息 |
---|---|
SELECT DATABASE( ) | 当前数据库名 (或者返回空) |
SELECT USER( ) | 当前用户名 |
SHOW STATUS | 服务器状态 |
SHOW VARIABLES | 服务器配置变量 |
序列
属性:auto_increment
create table student (stu_id int auto_increment,stu_name varchar(20));
insert into student values(null,'wdp);
插入时把对应的属性值设为null或者0就会自动增加
重置序列:
当删除某条记录导致序列不能按连续的顺序时,先删除该自增的属性,再添加属性即可
alter table student drop stu_id ;
alter table student add stu_id int not null auto_increment,add primary key(stu_id);
注意:设为自增的字段必须为主键,一个表只能由一个主键;
设置序列开始值:
alter table table_name auto_increment=100;
如果原来的值为3,现在设为10,那么原先的记录保持不变新的记录从10开始
查询auto_increment值:
select auto_increment from infromation_schema.tables where table_name='table_name';
处理重复数据
设置为主键或者unique保证属性值的唯一性
如果对某一属性设置了unique索引:
- insert into :重复的值将会报错
- insert ignore into:插入重复的值不报错
- insert replace into:先删除属性值重复的记录,再插入新记录
统计重复数据:
select count(*) as repetition from student group by id,name;
count(*) 表示计算满足后面条件的记录条数,然后作为属性repetitionde 值
过滤数据:
select distinct field1,filed2 from table_name;
删除重复的数据:
create table new_table_name select field1,filed2,filed3 from old_table_name group by field1,filed2,filed3
drop table old_table_name;
alter table new_table_name rename to new_table_name;
更多推荐
所有评论(0)