1. Tipo de datos
- tipos numéricos
1> Entero:
tipo entero | byte | Rango (firmado) | Rango (sin signo) |
tinyint | 1 | -128-127 | 0-255 |
smallint | 2 | -32,768-32,767 | 0-65.535 |
MEDIUMINT | 3 | -8,388,608-8,388,607 | 0-1,677,215 |
int, número entero | 4 | -2,147,483,648-2,147,483,647 | 0-4,294,967,295 |
Empezando | 8 | -9,223,372,036,854,775,808-9,223,372,036,854,775,807 | 0-18,446,744,073,709,551,615 |
configuración de la propiedad común de tipo entero: # 8fbc8f
1) sin signo: sin signo, no puede ser dos veces el valor límite superior.
2) auto_increment: auto-energizante (a partir de 1 Mo), debe coincidir con la clave principal.
3) clave principal: una clave principal identifica de forma exclusiva un campo en un registro o una pluralidad de campos.
Siempre que: clave principal (nombres de campo) ;, clave principal (campo 1, campo 2) ;, crear mesa (1 clave principal campo Tipo de campo 1, ......) ;, alter table añadir tabla de clave principal (nombres de campo);
Eliminar: modificación de tabla nombre de la tabla de clave principal de la gota; si el campo tiene el atributo AUTO_INCREMENT debe eliminar esto, con el fin de eliminar la clave primaria.
4) null: especifica si el valor del campo puede ser nulo es nulo o no. Puede ser utilizado en otros tipos.
5) por defecto: por defecto. Después de ajustar el valor por defecto, si es escrito en un valor por defecto se omite relleno. Se puede utilizar para otros tipos.
2> decimales:
1) números de coma flotante:
precisión solo flotador: una precisión de 7 (entero + decimal bit), existen (M, D) con una manera predeterminada M: dígitos enteros y decimales + D: dígitos decimales, redondeo exceso.
Doble doble: una precisión de 15 (decimal número entero bits +), hay (M, D) con una manera predeterminada M: dígitos enteros y decimales + D: dígitos decimales, el exceso de redondeo.
2) puntos fijos (más precisa):
Punto fijo de decimales: una cadena almacenada en el MySQL interna. Hay (M, D) con una manera predeterminada M: dígitos enteros y decimales + D: cifras decimales, más de dados.
- fecha Tipo
fecha y hora es la más común, minuto y segundo de la vuelta.
crear tiempo mesa (dt de fecha y hora); insertar en los valores de tiempo (ahora ());
- tipo de cadena
1> Guardar una pequeña cantidad de cadena cuando:
1) char (M): M es un entero entre 0 a 255, M representa el carácter cambiado se puede almacenar. Declarado longitud cuando la creación de tablas.
2) varchar (M): M es un entero entre 0 y 65.535, depósito representa símbolos M.
2> al guardar el texto grande:
1) texto: permite una longitud de 0 a 65.535 caracteres.
2) TINYTEXT: 0 ~ permitido longitud de 255 caracteres.
3) MEDIUMTEXT: 0 a 16.777.215 longitud permitida de caracteres.
4) longtext: longitud permitida de 0 a 4294967295 caracteres.
3> ENUM enumeran tipo: seleccionar de un conjunto único de valores permitidos. Radio! (Crear tabla t (enumeración sexo ( 'hombre', 'mujer');))
4> tipo SET: opcionalmente uno o más entre el conjunto de valores permitidos. Opción múltiple! (Crear la cena mesa ( 'ternera' , 'fideo', 'pizza', 'hamburguesa');)
FIND_IN_SET función de tipo de datos configurado para realizar búsquedas. Usted puede averiguar rápidamente tener un patrimonio combinado en el conjunto. (Seleccionar * de la cena, donde FIND_IN_SET ( 'fideo', 'cena');)
2. operador
- Los operadores aritméticos: +, -, *, /,%
- Los operadores de comparación: = Igual <> o = no igual, igual <=> (digno de comparación se puede usar para null) ,!
<, <=,>,> =, Entre la presencia del rango especificado (seleccione 10 entre 10 y 100; )
en presencia de la colección especificada, es nulo como NULL, no es nulo no es NULL,
como comodín partido (%) (SELECT 'ABCDEFG' como 'ABC%';) , o RLIKE regexp expresiones regulares (seleccione 'abcd' regexp '^ a';)
- Los operadores lógicos: NO o! Logical NO, Y, o && lógica AND, OR, o || o lógica, XOR lógico O exclusivo
3.常用函数
- 字符串函数
1> concat (s1,s2,...) : 连接为一个字符串。
2> insert (str,x,y,instr ) : 将字符串str 从第x位置开始,y个字符长的字符串换成 instr 。
3> lower (str) : 将字符串str 中所有字符变为小写。
4> upper (str) : 将字符串str 中所有字符变为大写。
5> left (str , x) : 返回字符串strx最左边的x个字符。
6> right (str , x) : 返回字符串strx最右边的x个字符。
7> replace (str ,a ,b ) : 用字符串b 替换字符串str 中所有的字符串a 。
- 数值函数
1> abs (x) : 返回x 的绝对值。
2> ceil (x) : 返回大于x 的最小整数值 。
3> floor (x) : 返回小于x 的最大整数值。
4> mod (x,y) : 返回 x/y 的模。
5> rand () : 返回0-1内的随机值。
- 日期和时间函数
1> curdate() : 返回当前日期。
2> curtime () : 返回当前时间。
3> now () : 返回当前日期时间。
4> unix_timestamp(date) : 返回日期date 的unix时间戳。
5> from_unixtime () : 返回unix 时间戳的日期值。
- 流程函数
1> if (value ,t ,f) : 如果value 是真,返回t ,否则返回f 。
2> ifnull (value1, value2) : 如果value 不为空,返回value1 ,否则返回default。
3> case when [value1] then [result1] ... else [default] end : 如果value1 是真,返回result1 ,否则返回default 。
4> case [expr] when [value1] then [result1] ... else [default] end : 如果expr 等于value1 ,返回result1 ,否则返回default 。
- 其他
1> datebase () : 返回当前数据库名。
2> version () : 返回当前数据库版本。
3> inet_aton (ip) : 返回IP地址的数字表示。
4> inet_ntoa (num) : 返回数字代表的IP地址。
4.语句分类
DDL语句:对数据库内部对象进行创建、删除、修改等操作的语句。
- 语句以 ; 或 \g 结尾
- 查看数据库列表: show databases ;
- 创建数据库:
1> 创建数据库: create database 数据库名 ; ( create database STUDENT ; )
2> 选中要操作的数据库: USE 数据库名 ; ( USE STUDENT; )
3> 查看数据库中的数据表(先选中数据库): show tables ;
- 删除数据库:
删除数据库: drop database 数据库名 ;
下列操作的前提先选中数据库
- 创建表: < > 表示可省略内容
1> 创建表: create table 表名(字段1名 字段1类型 < 列的约束条件 > , 字段2名 字段2类型 < 列的约束条件 >, ...... ) ;
( create table student (id1 int , id2 int ) ; )
列的约束条件默认值为: default null ,可省略不写。
2> 查看表的定义(创建完表后): desc 表名 ;
3> 查看创建表时的SQL语句: show create table 表名 \G
\G 使记录能够按照字段竖向排列,显示效果更好。\G之后不用分号 (加上分号会报错)
- 删除表:
删除表: drop table 表名 ;
- 修改表:
1> 修改表的字段类型(int改为tinyint) : alter table 表名 modify <column> 字段名 字段类型 <first | after 字段名> ; ( alter table student modify id1 tinyint ; )
2> 增加表字段 :alter table 表名 add <column> 字段名 字段类型 <first | after 字段名> ; ( alter table student add id3 int ; )
3> 删除表字段 : alter table 表名 drop <column> 字段名 ; ( alter table student drop id3 ; )
4> 字段改名 : alter table 表名 change <column> 旧的字段名 新的字段名 新的字段类型 <first | after 字段名> ; ( alter table student change id2 di3 int ; )
change 和 modify 都可以修改字段类型,但change 还可以修改字段名
5> 修改字段顺序: 在以上语法中 <first | after 字段名> 的作用是修改顺序,在哪个字段前或后。 ( alter table student modify id1 tinyint after id2 ; ) ( alter table student add id4 int first ; )
只能after 字段名 ,first 字段名 会报错。
6> 更改表名 : alter table 旧表名 rename <to> 新表名 ;
DML语句:对数据库中表记录的操作,包括表记录的插入、更新、删除查询。是使用最频繁的语句。
先创建一个数据库和一张简单的表 :
create database data ;
USE data;
create table tab1 (id int ,age tinyint) ;
- 插入记录 :
1> 插入记录 :insert into 表名 < (字段1,字段2,......) > values(值1,值2,......) ; ( insert into student values (1,20); ) ( insert into student (age,id) values (25,2); )
2> 一次插入多条记录:insert into 表名 < (字段1,字段2 ,......) > values (值1,值2,......) ,(值1,值2 ,......) , ...... ; ( insert into student (id,age) values (3,12),(4,87),(5,33); )
- 更新记录:
1> 更新一个表:update 表名 set 字段1=值1,字段2=值2,...... < where 条件 > ; ( update student set age=100 where id=1; )
2>更新多表中数据: update 表1,表2,...... set 表1.字段1=表达式1,表n.字段n = 表达式n <where 条件> ;
( 再创建一个和student一模一样的表employee, update student,employee set student.age=1000,employee.age=20000 where student.id=1 and employee.id=1 ; )
- 删除记录:
1> 删除单表中的记录: delete from 表名 where 条件 ; ( delete from student where id=3; ) ( delete from student where age=20; ) ( delete from student where age=20 or id=5 ; )
2> 删除多表中的记录: delete 表1,表2,...... from 表1,表2,...... where 条件 ; ( delete student,employee from student,employee where student.age=20 and employee.id=1; )
如果不加where 条件,则表中所有记录被删除。
- 查询记录:
select * <别名> from 表名 where 条件 ; 查询时可以为字段编辑别名,适用与php配合。
1> 查询不重复的记录:select distinct 字段1,字段2from 表名 < where 条件 > ; (有distinct ,字段1,字段2中任何字段有不同就会被选择。) ( select distinct id from student ; )
2> 条件查询: or ,and, = , >, <, >= , <= ,!= 等比较运算符等
- 排序和限制:
1> 排序:select * from 表名 < where 条件 > order by 字段1 DESC/ASC ; ( select * from student order by age DESC ; )
默认ASC:由低到高 。
select * from 表名 < where 条件> order by 字段1 DESC/ASC,字段2 DESC/ASC, ...... ;
在字段1有重复情况下,按照后续字段依次排序。
2> 限制:对于排序后的数据若只希望显示一部分,在查询语句后面使用 LIMIT start(开始处),row(条数) 来限制。
( 比如只希望显示从头开始的3条数据,select * from student order by age desc limit 3 ;
比如只希望显示第3条至第5条数据, select * from student order by age desc limit 2,3 ; )
- 聚合:
1> sum求和: select sum(字段名) from 表名 ; ( select sum(age) from student ; )
2> count 记录总数:select count (字段名) from 表名 ; ( select count(*) from student ; )
3> max 最大值: select max(字段名) from 表名 ;
4> min 最小值 : select min (字段名) from 表名 ; ( select min(age) from student ; )
5> group by 分组 :select 字段名 from 表名 group by 字段名 < with rollup> ;
< with rollup> 对分类结果进行再汇总。 select sum(salary) from employee group by department ; 和 select department,sum(salary) from employee group by department ; 加上一个 with rollup 可以对分组结果进行汇总。
6> having 条件过滤:搭配 group by 。group by 不能与where搭配。
( 筛选部门总薪水大于1000的部门,select department,sum(salary) from employee group by department having sum(salary) > 10000 ; )
- 表连接: #8fbc8f
- 1> 内连接:选取两站表中相互匹配的部分。 (select id,department ,salary from student , employee where student.id = employee.id ; )
2> 外连接:
左连接:包含左边表中的所有记录,右表依附左表,没有的填NULL。 (select student.id,department ,salary from student left join employee on where student.id = employee.id ; )
右链接:包含右边中的所有记录,左表依附于右表,没有的填NULL。
- 子查询:一个查询需要调用另一个查询的结果。
1> in :in后面的子语句必须只返回一个字段,若查询结果唯一(只有一条时)可以使用 = 来代替 in 。
( select * from employee where id in ( select id from from employee_late ) ; ) 调用查询—返回迟到人员id的查询结果。
2> not in :与 in 相反。
3> exists :exists前的语句中每一项与后面的子语句进行匹配,能这一项能匹配上返回true,匹配不上返回false,根据子语句返回的结果输出。
( select * from employee where exists ( select * from employee_late where employee_late.id = employee.id) ; ) employee表中的第一项即id=1的员工与late迟到表中的id相比较,若有,返回的是true,那么把id=1 员工在employee表中的所有信息打印,若没有,前进到下一项id=2......
4> not exists:与exists 相反。
- 记录联合:将两个或多个表按照要求查询出的结果合并到一起显示。
1> union : 将多个查询结果合并并去重后再返回。
2> union all :直接合并。
union , union all 合并的条件是:要合并的结果,它们的列数必须相同。
DCL语句:数据控制语句,可对数据库相关权限进行设置。