小笔记-mysql基础

来源:互联网 发布:npm 淘宝镜像 安装 编辑:程序博客网 时间:2024/06/08 16:34
SET NAMES GBK//就可以在mysql中显示以gbk的形式显示 \G网格形式显示\\''单引号中可以写入字符串
    DESC tb_name/查看数据表的机构
· tb_name1 AS tb_name2//更新别名






declare 声明得是局部得变量 ,在begin end 中使用 
select  。。into 变量  和    @变量 都是全局变量,用户变量,只对当前用户所使用的客户端有效










创建数据库
create database db_name;
查看数据库
show databases;
查看正在使用的数据库
select databases;
使用某数据库
use database;
创建表
create table t_name(
列名 数据类型(size) Null or not Null,//默认为null
...
)
查看数据表
show tables;
show tables from db_name;
show tables from mysql;
查看数据表结构
show columns from tb_name;
插入记录
insert [into] tb_name [(col_name,..)]values(val,...);[]代表可以省略,如果省略就要全部都要赋值
记录的查找
select 。。。。from tb_name;//*代表全部的字段,也就是列。
自动编号 必须和主键(自动为not null)一起使用,默认起始值为一。
create table tb(
id smallint ussigned Auto_increment [primary] key;
.....)
唯一约束unique key(可以存在null,保证记录的唯一性,可以存在多个唯一约束)//也是保证了记录的不重复,null特别
create table tb(
id smallint ussigned Auto_increment [primary] key;
username varchar(20) not null unique key;
.....)
默认约束 default//如果没有复制,系统赋予默认值
create table tb(
id smallint ussigned Auto_increment [primary] key;
username varchar(20) not null unique key;
sex Enum('nan','nv') default 'nan';
.....)
外键约束的要求解析(foreign key)
test pro users








添加(单列,不需要添加小括号)多列必须添加小括号,切不能指顶位置
alter table tb_name ADD [column] col_name int nut null [first|after col_name1(在谁之后)] 默认在最后
添加主键约束
alter table tb_name ADD [constraint [symbol]] primary key[index_type](col_name)
添加唯一约束
alter table tb_name ADD [constraint [symbol]] UNIQUE[index_type](col_name)
添加唯一约束
alter table tb_name ADD [constraint [symbol]] FOREIGN KEY[index_type](col_name) REFERENCES table_name(col_name);//参照得那个字段
添加/删除默认约束
alter table tb_name alter [column] col_name{set default literal(默认值)| Drop default}


删除主键约束
alter table tb_name Drop primary key;
删除唯一约束
首先得查一下 show indexes from Table_name\G(网格状查看)
alter table tb_name Drop index col_name;
删除外键约束
show create table table_name;
alter table tb_name Drop foreign key 外键约束得名字;




删除列
alter table tb_name drop col_name//单列


alter table tb_name drop col_name1,col_name2..;//多列




修改数据表
    修改列定义
alter table tb_name modify [column] col_name 数据类型 nut null frist||after col_name;//改变列得位置,类型也可以修改,但是可能造成数据得丢失
    修改类名称
alter table tb_name change old_col_name new_col_name 数据类型(也可以改变)


    修改数据表得名字


alter table tb_name rename new_table_name;


rename table ta_name to new_tab_name[...]//可以修改多个表名


    插入insert
1.insert tb_name(clo_name,..)VALUES(value1,value2,.。。。,表达式,值都可以,与前面相匹配)//在这个列中,可以一次性插入多个,
当给auto_increment 可以赋值null或则default
给default 可以赋予default
2.insert tb_name1(col_name,....) select ..from tb_name2;
3.insert tb_name set col_name="";
更改记录(单表更新)
update tb_name  set col_name="",...更新一列或者多列
删除记录,单表删除
delect from tb_name where ...




查询表达式可以使用AS alias_name作为别名
select 表名.列名 ...多表链接得时候,这样不会出现错。


group by col_name 或者在select语句中列得位置(数字)【asc默认上升||desc下降】having where (要么 是个聚合函数,要么在select中有这个字段(列名))
AVG()平均 ROUND四舍五入
order by col_name,col_name2....可以多个判断
limit 限制记录所返回得数量
LIMIT 2||limit 3,2;//但是默认从0开始
LIMIT 数值||从那一行开始,数值(多少个)




子查询
SET NAMES GBK//就可以在mysql中显示以gbk的形式显示 \G网格形式显示\\''单引号中可以写入字符串
    DESC tb_name/查看数据表的机构


>ANY 其中任意一个,比最小值小就行<比最大值小
>SOME 其中任意一个,比最小值小就行<比最大值小
ANY SOME 是一样的
>All 满足其全部的条件 ,!=任意值


in /not in 等价于any some运算 ()满足其中至少一个
Exists //not exists






***参照一个表更新另一个表,多表更新

inner join 用on来链接两个表的条件//只能显示两个表共有的
left join 左表中,以左表为标准,显示全部有的 右表不存爱呈现不出来的null取代
right join 右表中,以右表为标准,显示全部有的 左表不存爱呈现不出来的null取代
inner join
update tb_name [连接类型(inner left right)] INNER JOIN tb_name2
      ->ON tb_name.列名=tb_name2.列名
      ->SET tb_name.列名=。。。;//但是列的数据类型并没有改变要想改变数据类型


***** UPDATE TABLE tb_name
->CHANGE old.col_name new.col_name1 数据类型 not null||null


CREATE ....SELECT
CREATE TABLE[IF NOT EXISTS] tb_name
       ->(
-> col_name1 (数据类型) primary key auto_increment,
->col_name2.....
->)
->select .....;//aotu_increment 的不用管了,只要把其他的添加进去就行


***三个表的链接


SELECT col_name1,col_name2...from tb_name1 AS 别名
->INNER JOIN tb_name2 ON 条件
->INNER JOIN tb_name3 ON 条件


自身链接 5-13
将自己看成两个表,一个为字表,一个为父表,一定要起一个别名,别名可以写在声明前面

例如 table table_name 


` select p.col_name,p.col_name2,s.col_name FROM tb_name AS p LEFT(RIGHT,INNER) JOIN
tb_name AS s
->ON 条件 GROUP BY p.col_name ORDER BY p.coi_name;  


多表的删除 (5-14)


首先要判断一下,表中重复的东西,例如,运用分组和聚合函数
SeleCT col_name from tb_name GROUP BY col_name HAVING count(col_name)>1;
//也要有别名,子查询可以设置一个别名
DELETE t1 FROM tb_name AS t1 LEFT JOIN (
SeleCT col_name from tb_name GROUP BY col_name HAVING count(col_name)>1) 
AS t2 ON t1.col_name=t2.col_name WHERE t1.col_ID>t2.col_ID;
//这个列子的含义是 删除一个表中 某项东西重复的(名字)并且保留 ID小的




字符函数
concat('',''....)//可以连接多个字符串


CONCAT_WS('分隔符’,‘’,‘’,...)//使用指定的分隔符进行字符链接
` 出现(‘’分隔符‘’分隔符。。。)


FORMAT(数字,小数点几位)
FORMAT(1235.69,0)保留到整数

LOWER();//小写
UPPER();//大写
LEFT('',INT)//保留几个字符
RIGHT('',INT)//右边开始保留几个字符 
TRIM('')删除空格,前导和后导的,中间的删除不了
TRIM(LEADING '前导字符'FROM '字符串');//前导
TRIM(TRAILING '前导字符'FROM '字符串');//后续
TRIM(BOTH '前导字符'FROM '字符串');//前导,后续,中间的删除不了
REPLACE('字符串','要被代替的字符','代替成什么东西')//替换
LIKE‘’ESCEPT 1 (意思是1之后的那个%不再是通配符了)//模式匹配 %0-多个字符 _一个字符
SUBSTRING(‘字符串’,‘冲那一位开始截取int从1||-1(正,反)开始’,'截取几位')


select connection_id() //链接id
· select database()//当前锁打开的数据库
user()
LAST_INSERT_ID()//最后插入的id
VERSION()//当前版本信息




















DELIMITRT //分界符














自定义函数(user-defined function,UDF)
     参数 返回值

·CREATE FUNCTION FUNCTION_NAME
 RETURNS 
 函数体

删除函数DROP FUNCTION 函数名();


·不带参数的函数
日期转换 DATE_FORMAT(NOW(),'%Y年%m月%d日’);
     ·CREATE FUNCTION F1() RETURNS VARCHAR(30)
·       RETURN DATE_FORMAT(NOW(),'%年%月%日');


·有参数得函数



存储过程
·CREATE PROCEDURN sp_name()


调用 存储过程 CALL sp_name();


存储过程中 类型 IN OUT 分别代表输入的,返回的


ROW_COUNT();显示变化得行数

DELIMITER //分界符
CREATE PROCEDURE p_name( IN p_age smallint unsigned,OUT p_delect smallint unsigned,OUT p_username smallint unsigned)
->begin
->DELETE FROM tb_name WHERE age=p_age;
->SELECT ROW_COUNT() INTO p_delect;  //将查找出来的值赋予p_delect
->SELECT COUNT(id) from tb_name INTO p_username;
->end
->//
DELIMITER ;
CALL p_name(20,@a,@b);


declare 声明得是局部得变量 ,在begin end 中使用 
select  。。into 变量;    @变量 是全局变量,用户变量,只对当前用户所使用的客户端有效


存储引擎

查看数据表 show tables;
查看数据表得创建 show create table tb_name;


并发控制  修改时保证数据一致性和完整性
   *锁 
·共享锁(读锁):在同一时间段,多个用户可以读取同一个资源,读取过程中数据不会发生任何变化

·排他锁(写锁):在任何时候只能有一个用户可以写入资源,当进行写锁时会阻塞其他得读锁或者写锁操作
 
   *锁颗粒
-表锁,是一种开销最小的锁策略(当用户,打开表,用户就会获得这个权限)
-行锁,是一种开销最大得锁策略


事务:用于保证数据库的完整性
外键 : 保证数据一致性
索引:是对数据表中一列或者多列的值进行排序的一种结构


1
存储引擎包括:
·MyISAM 
·InnoDB
·Memory
·CSV
·Archive
`
****修改存储引擎的方法。
·第一种方法
修改配置文件 -dafault-storage-engine=engine(默认);
·第二种方法
CREATE TABLE  tb_name(
->..
->)ENGINE=MyISAM;
查看 show CREATE TABLE tb_name;查看引擎的方式


·第三种方法
ALTER TABLE tb_name RNGINE=InnoDB;修改了数据表的存储引擎





































原创粉丝点击