一、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.
信息发布:广州名易软件有限公司 http://www.myidp.net
|