mysql 基础知识

来源:互联网 发布:urlencoder js 解码 编辑:程序博客网 时间:2024/06/06 13:23
1.如何进入mysql
(1)命令行 cd(启动路径) 加 bin包路径 然后mysql  -u -p -h ;
(2)直接用mysql.exe 输入密码进去
2.库
(1)创建库:create database 库名
(2)删除库:create database 库名
(3)展示库里的所有表:show tables ;
(4)使用库:use 库名
3.表
(1)显示表:show tables;
(2)查看表结构 describe 表名;
(3)查看表的创建过程:show create table 表名;
(4)创建表:
    create table tbName (
列名 数据类型 约束条件,列名 数据类型 约束条件
)engine myisam/innodb charset utf8/gbk
添加约束条件的语法:
1.直接在建表语句的列后面写上约束类型,多个用逗号隔开(也叫作列级约束)
id int primary key
2.在建表语句中写(也叫作表级约束)
constraint 约束名(可以省略) unique(username)
*not null 只可以在列级约束 
存储引擎 engine=1\2
1. Myisam  速度快 不支持事务 回滚    
2. Innodb  速度慢 支持事务,回滚
创建临时表:CREATE TEMPORARY TABLE tmp_table 
    1.当你断开时,MySQL将自动删除表并释放所用的空间。当然你可以在仍然连接的时候删除表并释放空间。
    2.临时表再断开于mysql的连接后系统会自动删除临时表中的数据。
    3.另外mysql也允许你在内存中直接创建临时表,因为是在内存中所有速度会很快。
   注:innodb是表引擎,也可以是myisam或其他,但最常用的是myisam和innodb,charset 常用的有utf8,gbk;
(5)修改表 
        a.增加列  alter table tbName  add 列名称1 列类型 [列参数] [not null default ]
b. 修改列 alter table tbName  change 旧列名  新列名  列类型 [列参数] [not null default ]
c.删除列  alter table tbName drop 列名称;
d.添加主键 alter table tbName add primary key(主键所在列名);
(6)数据类型
a.整型
tinyint (0~255/-128~127) 
smallint (0~65535/-32768~32767) 
mediumint 
int 
bigint (参考手册11.2)
参数解释:
unsigned 无符号(不能为负)  zerofill 0填充  M 填充后的宽度
举例:tinyint unsigned;
tinyint(6) zerofill;  
b.小数类型
浮点型:float double
格式:float(M,D)  unsigned\zerofill;
c.字符型:
char(m) 定长  不够长系统会用空格补充
varchar(m)变长  字符串可以收缩,但不可越界
text
d.日期时间类型:
year       YYYY 范围:1901~2155. 可输入值2位和4位(如98,2012)
date       YYYY-MM-DD 如:2010-03-14
time       HH:MM:SS 如:19:26:32
datetime   YYYY-MM-DD  HH:MM:SS 如:2010-03-14 19:26:32
timestamp  YYYY-MM-DD  HH:MM:SS 特性:不用赋值,该列会为自己赋当前的具体时间
4.增删改查
(1)插入数据
a. 插入指定列
insert into 表名(col1,col2,……) values(val1,val2……); 


b. 插入所有列
insert into 表名 values (,,,,); 


c. 一次插入多行
insert into 表名 values    (val1,val2……),(val1,val2……),
(2)修改数据
update tablename set col1=newval1,  col2=newval2,.....colN=newvalN where 条件;
(3)删除
a.删除数据:delete from tablenaeme where 条件;
b.删除表格(包括结构和数据):drop table 表名;
c.删除数据(如果有自增条件,会恢复从1开始):truncate table 表名;
(4)select 查询
① 条件查询 where
a. 条件表达式的意义,表达式为真,则该行取出 
b. 比较运算符  = ,!=,< > <=  >=
c. like , not like ('%'匹配任意多个字符,'_'匹配任意单个字符) in , not in , between and
d. is null , is not null
② 分组 group by
一般要配合5个聚合函数使用:max,min,sum,avg,count
*group by 列名,列名 进行两次分组
group_concat(列名):放于select 后将一组数组放在一行中
③ 筛选 having
where 和 having 区别
a.where是判断数据从磁盘读入内存的时候,一条一条读取进行判断,满足条件放入内存,
不满足忽略。having是判断分组统计之前的所有条件,将数据放入内存逐条删除。
b.having子句中可以使用字段别名,而where不能使用。
c.having能够使用统计函数,但是where不能使用
d.having 先分组,再判断 , where 先判断再分组
④ 排序:
正序:order by  列名 asc;
逆序:order by  列名 desc;
*多次排序 asc /desc后用逗号隔开
⑤ 限制 limit:
LIMIT 子句可以被用于强制 SELECT 语句返回指定的记录数。LIMIT 接受一个或两个数字参数。
参数必须是一个整数常量。如果给定两个参数,第一个参数指定第一个返回记录行的偏移量,
第二个参数指定返回记录行的最大数目。
mysql> SELECT * FROM table LIMIT 5,10;  // 检索记录行 6-15
mysql> SELECT * FROM table LIMIT 5;     //检索前 5 个记录行
//换句话说,LIMIT n 等价于 LIMIT 0,n。
⑥ 表间关联
内关联:
表一 inner join 表二 on 连接条件 
外关联:
左外关联:表一 left outer join 表二 on 连接条件 
右外关联:表一 right outer join 表二 on 连接条件 
全外关联:表一 full outer join 表二 on 连接条件 (mysql 不支持)
*外关联中的驱动表和从表
⑦ 子查询 
where 型子查询: 
内层sql的返回值在where后作为条件表达式的一部分 
例句: select * from tableA where colA = (select colB from tableB where …);
from 型子查询: 
内层sql查询结果,作为一张表,供外层的sql语句再次查询 
例句:select * from (select * from …) as tableName where …. 
5.触发器
触发器 trigger
监视地点:表
监视行为:增 删 改
触发时间:after\before
触发事件:增 删 改
创建触发器语法
create trigger tgName
after/before insert/delete/update 
on tableName
for each row
sql; -- 触发语句
删除触发器:drop trigger tgName;
6.索引
提高查询速度,但是降低了增删改的速度,所以使用索引时,要综合考虑.
索引不是越多越好,一般我们在常出现于条件表达式中的列加索引.
值越分散的列,索引的效果越好
索引类型:
primary key主键索引
index 普通索引
unique index 唯一性索引
fulltext index 全文索引
7.主键、外键、候选键、外键
主 键(primary key):
数据库表中对储存数据对象予以唯一和完整标识的数据列或属性的组合。一个数据列只能有一个主键,且主键的取值不能缺失,即不能为空值(Null)。
超 键:
在关系中能唯一标识元组的属性集称为关系模式的超键。一个属性可以为作为一个超键,多个属性组合在一起也可以作为一个超键。超键包含候选键和主键。
候选键:
是最小超键,即没有冗余元素的超键。
外 键(foreign key () reference 被参照表名(主键)):
在一个表中存在的另一个表的主键称此表的外键。
*注意
(1).外键的参照列只能是主键或者唯一约束的
(2).同一个表中可以有多个外键约束
(3).被参照的表成为主表,如果要删除主表中被引用列的数据必须先删除从表中的数据
*语法:
foreign key(classes_id) references classes(id) 
classes_id int references classes(id)
*级联修改,删除
on update cascade
on delete cascade
8.关键字:
change:对列进行重命名或更改列的类型,需给定旧的列名称和新的列名称、当前的类型
modify: 可以改变列的类型,此时不需要重命名(不需给定新的列名称)
distinct: 去重使用,在查询时必须放在最前面。
9.用户设置:
查看:mysql> select host,user,password from user ;
创建:mysql> create user  zx_root   IDENTIFIED by 'xxxxx';   //identified by 会将纯文本密码加密作为散列值存储
修改:mysql>rename   user  feng  to   newuser;//mysql 5之后可以使用,之前需要使用update 更新user表
删除:mysql>drop user newuser;   //mysql5之前删除用户时必须先使用revoke 删除用户权限,然后删除用户,mysql5之后drop 命令可以删除用户的同时删除用户的相关权限
更改密码:mysql> set password for zx_root =password('xxxxxx');
mysql> update  mysql.user  set  password=password('xxxx')  where user='otheruser'
查看用户权限:mysql> show grants for zx_root;
赋予权限:mysql> grant select on dmc_db.*  to zx_root;
回收权限:mysql> revoke  select on dmc_db.*  from  zx_root;  //如果权限不存在会报错 
上面的命令也可使用多个权限同时赋予和回收,权限之间使用逗号分隔
mysql> grant select,update,delete  ,insert  on dmc_db.*  to  zx_root;
如果想立即看到结果使用
flush  privileges ;
命令更新 
grant和revoke可以在几个层次上控制访问权限
1,整个服务器,使用 grant ALL  和revoke  ALL
2,整个数据库,使用on  database.*
3,特点表,使用on  database.table
4,特定的列
5,特定的存储过程 
user表中host列的值的意义
%                匹配所有主机
localhost    localhost不会被解析成IP地址,直接通过UNIXsocket连接
127.0.0.1     会通过TCP/IP协议连接,并且只能在本机访问;
::1                ::1就是兼容支持ipv6的,表示同ipv4的127.0.0.1



















原创粉丝点击