mysql2

十七、添加主键

              ALTER TABLE 表名 ADD CONSTRAINT 主键名

        PRIMARY KEY 表名(主键字段);

 

十八、添加外键:

ALTER TABLE 表名 ADD CONSTRAINT 外键名             

FOREIGN KEY(外键字段)

REFERENCES 关联表名(关联字段);

 

 

-------------------------------------------------------------------------------

 

【1】mysql的存储引擎:MyISAM、InnoDB、Memory、CSV...

名称

InnoDB

MyISAM

事务处理

支持

不支持

数据行锁定

支持

不支持

外键约束

支持

不支持

全文索引

不支持

支持

表空间大小

较大,约2倍

较小

       适用场合

  •   使用MyISAM:   不需事务,空间小,以查询访问为主
  •   使用InnoDB:     多删除、更新操作,安全性高,事务处理及并发控制

 

查看当前默认存储引擎:

show variables like 'storage_engine%';

 

修改存储引擎:

修改my.ini配置文件default-storage-engine= InnoDB

 

【2】DML语句

       (1)插入单挑数据记录

INSERT INTO 表名 [(字段名列表)] VALUES (值列表);

 

字段名是可选的,如省略则依次插入所有字段

多个列表和多个值之间使用逗号分隔

值列表和字段名列表一一对应

如插入的是表中部分数据,字段名列表必填

 

(2)插入多条数据记录:values注意S

       INSERT INTO 新表(字段名列表)

VALUES(值列表1),(值列表2),……,(值列表n);

      

        (3)将查询结果插入新表

CREATE TABLE 新表(SELECT 字段1,字段2……  FROM 原表);

  

        (4)数据更新

                UPDATE 表名

    SET 字段1=值1,字段2=值2,…,字段n=值n

    [WHERE 条件];

     

 

              (5)数据删除

                     DELETE FROM 表名 [WHERE条件];

                    

                     TRUNCATE TABLE 表名;

                     删除表中的所有数据,单表结构还存在

 

【3】查询SELECT * FROM 表名

      

              查询产生一个虚拟表

看到的是表形式显示的结果,但结果并不真正存储

每次执行查询只是从数据表中提取数据,并按照表的形式显示出来

(1)     查询语法

SELECT    <列名|表达式|函数|常量>

FROM      <表名>

[WHERE    <查询条件表达式>]

[ORDER BY <排序的列名>[ASC或DESC]];

 

(2)     使用AS命名列-----列别名

ELECT `firstName` + '.' + `lastName` AS 姓名

FROM `employees`;

 

 

(3)     查询空行

SELECT `studentName` FROM `student` WHERE `email` IS NULL;

(4)     常量列

SELECT `studentName` AS 姓名,`address` AS 地址,

’北京信息中心’ AS 学校名称

FROM `student`;

【4】常用函数—聚合函数

                    

函数名

作用

AVG()

返回某字段的平均值

COUNT()

返回某字段的行数

MAX()

返回某字段的最大值

MIN()

返回某字段的最小值

SUM()

返回某字段的和

 

 

 

 

字符串函数

函 数 名

作    用

举    例

CONCAT(str1,

       str1...strn)

字符串连接

SELECT    CONCAT('My','S','QL');

返回:MySQL

INSERT(str,

pos,len,

newstr)

字符串替换

SELECT INSERT(

    '这是SQL Server数据库',

    3,10,'MySQL');

返回:这是MySQL数据库

LOWER(str)

将字符串转为小写

SELECT LOWER('MySQL');

返回:mysql

UPPER(str)

将字符串转为大写

SELECT UPPER('MySQL');

 返回:MYSQL

SUBSTRING

  (str,num,len)

字符串截取

SELECT SUBSTRING(

    'JavaMySQLOracle',5,5);

返回:MySQL

 

时间和日期函数

函数名

作用

举例(结果与当前时间有关)

CURDATE()

获取当前日期

SELECT CURDATE();

返回:2016-08-08

CURTIME()

获取当前时间

SELECT CURTIME();

返回:19:19:26

NOW()

获取当前日期和时间

SELECT NOW();

返回:2016-08-08 19:19:26

WEEK(date)

返回日期date为一年中的第几周

SELECT WEEK(NOW());

返回:26

YEAR(date)

返回日期date的年份

SELECT YEAR(NOW());

返回:2016

HOUR(time)

返回时间time的小时值

SELECT HOUR(NOW());

返回:9

MINUTE(time)

返回时间time的分钟值

SELECT MINUTE(NOW());

返回:43

DATEDIFF(date1,date2)

返回日期参数date1和date2之间相隔的天数

SELECT DATEDIFF(NOW(),

     '2008-8-8');

返回:2881      

ADDDATE(date,n)

计算日期参数date加上n天后的日期

SELECT ADDDATE(NOW(),5);

返回:2016-09-02  09:37:07 

 

      

 

数学函数:

函数名

作    用

举        例

CEIL(x)

返回大于或等于数值x的最小整数

SELECT CEIL(2.3)

返回:3

FLOOR(x)

返回小于或等于数值x的最大整数

SELECT FLOOR(2.3)

返回:2

RAND()

返回0~1间的随机数

SELECT RAND()

返回:0.5525468583708134

 

【5】ORDER BY子句

              ORDER BY 字段名 desc 倒序显示

              ORDER BY 字段名 (asc) 正序显示

【6】LIMIT子句

              LIMIT 位置偏移量,行数;

              LIMIT 4;从第一个显示到第四个

              LIMIT 4,4;从第五个显示到第八个

             

 

【7】子查询:一个嵌套在 SELECT、INSERT、UPDATE 或 DELETE 语句或其他子查询、中的查询

【8】模糊查询:where stuNo LIKE ‘%00%’;含有00

                                                 LIKE ‘_0%0_’,四位或五位数

 

【9】exists子查询

              Select…from 表名 where exists(子查询)

                     子查询有返回结果,exists子查询结果为true

                     子查询为返回结果:exists子查询结果为false,外层循环不执行

 

【10】  WHERE子句

用来筛选 FROM 子句中指定的操作所产生的行

GROUP BY子句 用来分组 WHERE 子句的输出

HAVING子句 用来从分组的结果中筛选行

【11】  多表链接查询

内连接:inner join

             

              三表内连接

SELECT S.studentName AS 姓名,SU.subjectName AS 课程,R.studentResult AS 成绩

FROM student AS S

INNER JOIN `result` AS R ON  (S.`studentNo` = R.`studentNo`)

INNER JOIN `subject` AS SU ON (SU.subjectNo=R.subjectNo);

 外连接:(a left join b  on    、a right join b on)

left 结果集数量以 a为基准

 

posted @ 2018-01-25 13:35  言之有李  阅读(125)  评论(0编辑  收藏  举报