MySQL个人学习笔记
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
MySQL个人学习笔记
一、mysql常见的数据类型:
int(8) 整形,
float(5,1) 浮点型,规定插入的值不超过5位数字,小数点后面带两位数字且小数点超出后会四舍五入,
double(5,2)一样是浮点型
decimal(5,2) 一样是浮点型。
char(8)字符型,
varchar(8)可变字符型。
date,values(‘2014-04-23’)或(20104423)
time,values(‘12:30:50’)或(123050)
year,values(2014)
datetime,values(‘1993-03-12 12:30:12‘)或(012)
null 类型。
表示什么都没有。
null 不等于 ' ' ~~~。
二、mysql常见的运算符:
+、-、*、/、%、
<,>,=,>=,<=,!=,<=>(用于安全等于null值。
no <=> null)
NOT 或 !,AND 或 && ,OR 或 ||,
三、mysql常见的函数:
ABS(X)返回x的绝对值。
CURDATE() 返回当前的日期 2014-04-23
CURTIME() 返回当前的时间 19:17:13
NOW() 返回当前的日期和时间 2014-04-23 19:17:48
聚合函数:AVG(COLUME) 求该列的平均值, COUNT(COL) 计算列中非null的行数,MIN(COL)
求该列的最小值,MAX(COL) 求该列的最大值,
SUM(COL) 求该列值的和,COUNT(*) 计算表中所有的行数,包括null值。
四、数据库和表:
1、创建数据库。
create database db1; 或着 create databse if not exists db1;
2、选择需要的数据库。
use db1;
3、删除数据库。
drop database db1; 或者 drop databse if exists db1;
4、创建表:create table table_name (name char(2),id int(2),....)
type=xxxx;
4.1 字段约束:
首先 null 不等于 ' '
null:
当某列的约束为null时,该字段的值可以插入null,表示没有数据。
建表时系统默认是null;
not null:
当某列的约束为not null时,说明该字段不能插入null值,但可以插入' '值;
defualt:
当某列的约束为default('**')时,若没有对该列插入任何数据,则默认是'*'这个值~但如果某列没有定义约束default的时候,系统默认是default(null);所以,此时插入数据则
该数据的值为 null;
unique:(创建unique时,自动加了index)
(他是属于键key的一种)当某列的约束为unique时,则要求插入该列的数据值不能一样,连' '这个值都不能一样~但可以插入多个
null值(没定义 not null的情况下),并且不会报错。
系统默认不会加unique 这个约束。
可以在定义列的同时一起定义,也可以在最后定义。
语法:create table t(id int(2) ,unique key unique_name(id));
auto_increment:
auto_increment修饰符只适用于int类型的字段。
表明Mysql应该自动为该字段生成一个数(从 1 开始,每加一个数据该值 +1),意味着,我们插入数据时,不用为该字段插入数据,系统自动会帮我们添加,即使该字段被not null约束。
注意,一个表只能有一个auto_increment字段,而且该字段必须被定义为键(可以是primary key、或unique键 )。
primary key:
(他是属于键key的一种,但他是主键)primary key = not null + unique~所以在创建primary key的时候,即使不加入not null,和unique来约束,也能有这两个的约束效果。
如: create table test (name int(8) primary key);就可以实现主键的功能。
但一般书上都是这样写的 :
create table test (name int(8) not null primary key);
主键约束不仅仅可以约束一个单独字段,还可以约束多字段的组合。
如 : create table test (host int(8) not null,port int(8) not
null,primary
key(host,key));这样的话使表可以允许主机ip或port端口重复,
但不允许ip和port同时重复。
可以看出,primary key 可以在定义列的同时一起定义,也
可以在最后定义。
index:
把某列拿出来,单独储存,这样以后查找会直接定位查找,这样查询速度比较快。
语句:
INDEX index_name(name);为name这个字段创建了名
为index_name的索引。
也可以INDEX (name),这样的话为name这个字段创建了名为name
的索引。
foreign key:(创建时,自动加了index)
在mysql中使用外键的表类型必须是innodb。
其他类型的会自动忽略外键这个功能。
设
置了外键,则想向该外键插入值的时候,必须是被参照的键存在的值。
自动更新和删除值:
在定义外键的语句后加入 ON DELETE :XXX .XXX有四个值:cascade 删除包含与已删
除键值有参照关系的所有记录、set null 删除包
含与已删除键值有参照关系的所有记录并用null值来替换、restricr 拒绝删除要求(系
统默认)、no action 什么也不做。
ON DELETE restricr 系统默认。
在定义外键的语句后加入 ON UPDATE: xxxx.XXX有四个值 (和on delete一样。
):cascade 更新包含与更新键值有参照关系的所有记录、set null 更新包
含与已更新键值有参照关系的所有记录并用null值来替换、restricr 拒绝更
新要求(系
统默认)、no action 什么也不做。
ON update restricr 系统默认。
外键定义,一般是在最后定义,如:
constraint fk_name foregin key (fk_id_colum) references table2 (id);
4.2 表的类型。
MyISM ISAM HEAP innoDB..等等。
系统默认的是 innoDB.只有innoDB才有外
键功能。
5、修改表:
基本命令:alter table table_name action action1,action action 2,....;
添加/删除列:alter table member add id varchr(9) not null;alter table drop name;
添加/删除的主键:alter table member add primary key(id);alter table
t4 drop primary key;
设置/删除的默认值约束:alter table member alter age set/drop default
1;
加入/删除索引:alter table t1 add/drop index (index_id) ;
添加/删除unique键:alter table t4 add unique key (myname);alter
table t1 drop index id ;(创建unique时,自动加了index)。
如果这个键已经存在相同的值,可加入ignore来删除相同数据,并保留第一
条数据。
alter ignore table user change name name int(1) unique;
设置新加入列的位置:alter table member add age int(8) AFTER id/FIRST;
重新命名表:alter table member rename to new_name;
//修改已经存在字段的名字和数据类型:alter table member Change name New_name char(9) auto_increment unique;
添加/删除auto_increment:(需要是键)。
alter movie change id int(3) not null auto_increment ;ALTER TABLE t1 CHANGE id id INT(3) NOT NULL ;
添加/删除外键:alete table t1 add constraint fk_name foregin key
(fk_id_colum)
references table2 (id);
alter table t2 drop foreign key fk_name;注意你删除的是index还是foreign key name;你创外键的时候,他会自动帮你
加入index。
要搞清楚那个名是index的name
还是foreign key的name;
action可选:ADD 加入新的列或新的约束,DROP ,ALTER,CHANGE 只能修改已经存在的列
名字和类型和已存在的 not null,及其auto _increment约束,但不能修改已存在的 primary key 和unique这两个主键,但可以新加入这两个主
键.MODIFY 和
change区别很小,modify不会修改字段名。
6.删除表:
drop table t1; drop table if exists t1;
7.获得数据库、表、字段和索引的信息。
show databases;
show tables;
describe t1;
show index from t1;
show create table t9;.
五、使用数据:
5.1 /插入记录:
insert into table_name (name,id) values ('ab',123),('abccc',456);
可以插入计算或者函数:如 insert into grade (math,english,total,time) values
(50,50,math+english,now());
相当于math=50,english=50了。
可以使用default值,如 insert into grade (math,english)
values(50,default);
使用autoincrement字段:插入的时候,不用写出来,系统会自动添加。
insert into grade (math,english) values(50,default);它的id会自动加的、使用unique字段:插入的值如果已经存在,则可以这样处理:在insert 后加入action.
action有三个取值:ignore(忽略此操作,什么都不干) / on duplicate key update(只更新部分)/replace(删除旧的记录,新的完全取代)
如:insert ignore into t1(id,name)values(1,'q');
insert into t1(id,name)values(1,'q')on duplicate key uodate
name='new';
replace into t1 values (1,'new') ;
使用null值::insert ignore into t1(id,name)values(1,null);
5.2/更新记录:
update table-name set id=1,name=2,where age=18;
跟插入记录差不多,插入记录用法都可以在更新记录这里用。
5.3删除记录。
delete from table_name where id = 1;
删除表的所有记录:
delete from table-name;
5.4检索记录:
select col1,col2 from table-name where id =1;
col1,col2 名字是什么,返回结果的第一行就显示什么名字。
可以使用内函数:
如:select max(math),min(english) from grade;
若:select max(math),english from grade; 则返回math和english的最大值,而不是一个最大值+一堆数据。
5.5为表和列取别名:
select mmmmm as m, qqqqqq as q from tabel_name;
selcte m , q from table_name as t where t.m >10;
5.6对查询结果进行分组:
select age from student group by age;
聚合函数可以英语有记录组成的每个单独组。
selecte age ,count(*) from student group by age;
selecte age ,avg(age) from student group by age;
可以想group by 添加asc和desc关键字来以升序和降序为结果集排序。
selecte age ,avg(age) from student group by age desc/asc;
5.7 对查询结果进行排序。
( 你不加order by 来排序的话,数据会显示实际在表中的顺序)
select idt3 from t3 order by idt3 desc{降序}/asc(升序);
同时进行多个排序:
select name,age from t1 order by name desc,age asc.
六、连接。
6.1 交叉连接
``
6.2 内连接
6.3 外连 `
接
6.4 自连接。