找网站公司做网站是怎样的流程,店铺详情页设计,电子商务网站建设参考文献,建行写在前面#xff1a; 由于毕业论文撰写和答辩耽搁了几个月#xff0c;但是在这几个月没有放弃学习Python#xff0c;就是没有时间写博客。进行我们主要对数据库mysql的操作指令集的学习。 一、mysql术语 Mysql是最流行的关系型数据库管理系统#xff0c;接下来介绍术语。 数…写在前面 由于毕业论文撰写和答辩耽搁了几个月但是在这几个月没有放弃学习Python就是没有时间写博客。进行我们主要对数据库mysql的操作指令集的学习。 一、mysql术语 Mysql是最流行的关系型数据库管理系统接下来介绍术语。 数据库: 数据库是一些关联表的集合。.数据表: 表是数据的矩阵。在一个数据库中的表看起来像一个简单的电子表格。列: 一列(数据元素) 包含了相同的数据, 例如邮政编码的数据。行一行元组或记录是一组相关的数据例如一条用户订阅的数据。冗余存储两倍数据冗余可以使系统速度更快。(表的规范化程度越高表与表之间的关系就越多查询时可能经常需要在多个表之间进行连接查询而进行连接操作会降低查询速度。例如学生的信息存储在student表中院系信息存储在department表中。通过student表中的dept_id字段与department表建立关联关系。如果要查询一个学生所在系的名称必须从student表中查找学生所在院系的编号dept_id然后根据这个编号去department查找系的名称。如果经常需要进行这个操作时连接查询会浪费很多的时间。因此可以在student表中增加一个冗余字段dept_name该字段用来存储学生所在院系的名称。这样就不用每次都进行连接操作了。)主键主键是唯一的。一个数据表中只能包含一个主键。你可以使用主键来查询数据。外键外键用于关联两个表。复合键复合键组合键将多个列作为一个索引键一般用于复合索引。索引使用索引可快速访问数据库表中的特定信息。索引是对数据库表中一列或多列的值进行排序的一种结构。类似于书籍的目录。参照完整性: 参照的完整性要求关系中不允许引用不存在的实体。与实体完整性是关系模型必须满足的完整性约束条件目的是保证数据的一致性。二、管理Mysql命令 USE 数据库名 :选择要操作的Mysql数据库使用该命令后所有Mysql命令都只针对该数据库。 SHOW DATABASES: 列出 MySQL 数据库管理系统的数据库列表。 SHOW TABLES: #显示指定数据库的所有表使用该命令前需要使用 use命令来选择要操作的数据库。 SHOW COLUMNS FROM 数据表: #显示数据表的属性属性类型主键信息 是否为 NULL默认值等其他信息。 create database testdb charset utf8; #创建一个叫testdb的数据库且让其支持中文 drop database testdb; #删除数据库 SHOW INDEX FROM 数据表:显示数据表的详细索引信息包括PRIMARY KEY主键。 三、数据类型 MySQL中定义数据字段的类型对你数据库的优化是非常重要的。 MySQL支持多种类型大致可以分为三类数值、日期/时间和字符串(字符)类型。 数值类型 MySQL支持所有标准SQL数值数据类型。 这些类型包括严格数值数据类型(INTEGER、SMALLINT、DECIMAL和NUMERIC)以及近似数值数据类型(FLOAT、REAL和DOUBLE PRECISION)。 关键字INT是INTEGER的同义词关键字DEC是DECIMAL的同义词。 BIT数据类型保存位字段值并且支持MyISAM、MEMORY、InnoDB和BDB表。 作为SQL标准的扩展MySQL也支持整数类型TINYINT、MEDIUMINT和BIGINT。下面的表显示了需要的每个整数类型的存储和范围。 类型大小范围有符号范围无符号用途TINYINT1 字节(-128127)(0255)小整数值SMALLINT2 字节(-32 76832 767)(065 535)大整数值MEDIUMINT3 字节(-8 388 6088 388 607)(016 777 215)大整数值INT或INTEGER4 字节(-2 147 483 6482 147 483 647)(04 294 967 295)大整数值BIGINT8 字节(-9 233 372 036 854 775 8089 223 372 036 854 775 807)(018 446 744 073 709 551 615)极大整数值FLOAT4 字节(-3.402 823 466 E381.175 494 351 E-38)0(1.175 494 351 E-383.402 823 466 351 E38)0(1.175 494 351 E-383.402 823 466 E38)单精度浮点数值DOUBLE8 字节(1.797 693 134 862 315 7 E3082.225 073 858 507 201 4 E-308)0(2.225 073 858 507 201 4 E-3081.797 693 134 862 315 7 E308)0(2.225 073 858 507 201 4 E-3081.797 693 134 862 315 7 E308)双精度浮点数值DECIMAL对DECIMAL(M,D) 如果MD为M2否则为D2依赖于M和D的值依赖于M和D的值小数值 日期和时间类型 表示时间值的日期和时间类型为DATETIME、DATE、TIMESTAMP、TIME和YEAR。 每个时间类型有一个有效值范围和一个零值当指定不合法的MySQL不能表示的值时使用零值。 TIMESTAMP类型有专有的自动更新特性将在后面描述。 类型大小(字节)范围格式用途DATE31000-01-01/9999-12-31YYYY-MM-DD日期值TIME3-838:59:59/838:59:59HH:MM:SS时间值或持续时间YEAR11901/2155YYYY年份值DATETIME81000-01-01 00:00:00/9999-12-31 23:59:59YYYY-MM-DD HH:MM:SS混合日期和时间值TIMESTAMP41970-01-01 00:00:00/2037 年某时YYYYMMDD HHMMSS混合日期和时间值时间戳 字符串类型 字符串类型指CHAR、VARCHAR、BINARY、VARBINARY、BLOB、TEXT、ENUM和SET。该节描述了这些类型如何工作以及如何在查询中使用这些类型。 类型大小用途CHAR0-255字节定长字符串VARCHAR0-65535 字节变长字符串TINYBLOB0-255字节不超过 255 个字符的二进制字符串TINYTEXT0-255字节短文本字符串BLOB0-65 535字节二进制形式的长文本数据TEXT0-65 535字节长文本数据MEDIUMBLOB0-16 777 215字节二进制形式的中等长度文本数据MEDIUMTEXT0-16 777 215字节中等长度文本数据LONGBLOB0-4 294 967 295字节二进制形式的极大文本数据LONGTEXT0-4 294 967 295字节极大文本数据CHAR和VARCHAR类型类似但它们保存和检索的方式不同。它们的最大长度和是否尾部空格被保留等方面也不同。在存储或检索过程中不进行大小写转换。 BINARY和VARBINARY类类似于CHAR和VARCHAR不同的是它们包含二进制字符串而不要非二进制字符串。也就是说它们包含字节字符串而不是字符字符串。这说明它们没有字符集并且排序和比较基于列值字节的数值值。 BLOB是一个二进制大对象可以容纳可变数量的数据。有4种BLOB类型TINYBLOB、BLOB、MEDIUMBLOB和LONGBLOB。它们只是可容纳值的最大长度不同。 有4种TEXT类型TINYTEXT、TEXT、MEDIUMTEXT和LONGTEXT。这些对应4种BLOB类型有相同的最大长度和存储需求。 四、mysql常用命令 MySQL 创建数据表 语法 1 CREATE TABLE table_name (column_name column_type); 创建一个student表 1 2 3 4 5 6 7 create table student( stu_id INT NOT NULL AUTO_INCREMENT, name CHAR(32) NOT NULL, age INT NOT NULL, register_date DATE, PRIMARY KEY ( stu_id ) ); 实例解析 如果你不想字段为 NULL 可以设置字段的属性为 NOT NULL 在操作数据库时如果输入该字段的数据为NULL 就会报错。AUTO_INCREMENT定义列为自增的属性一般用于主键数值会自动加1。PRIMARY KEY关键字用于定义列为主键。 您可以使用多列来定义主键列间以逗号分隔。MySQL 插入数据 语法 1 2 3 INSERT INTO table_name ( field1, field2,...fieldN ) VALUES ( value1, value2,...valueN ); 插入数据 1 2 3 4 5 6 7 8 9 10 11 mysql insert into student (name,age,register_date) values (alex li,22,2016-03-4) - ; Query OK, 1 row affected (0.00 sec) mysql select * from student; ------------------------------------- | stu_id | name | age | register_date | ------------------------------------- | 1 | alex li | 22 | 2016-03-04 | ------------------------------------- 1 row in set (0.00 sec) MySQL 查询数据 语法 1 2 3 4 SELECT column_name,column_name FROM table_name [WHERE Clause] [OFFSET M ][LIMIT N] 查询语句中你可以使用一个或者多个表表之间使用逗号(,)分割并使用WHERE语句来设定查询条件。SELECT 命令可以读取一条或者多条记录。你可以使用星号*来代替其他字段SELECT语句会返回表的所有字段数据你可以使用 WHERE 语句来包含任何条件。你可以通过OFFSET指定SELECT语句开始查询的数据偏移量。默认情况下偏移量为0。你可以使用 LIMIT 属性来设定返回的记录数。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 mysql select * from student limit 3 offset 2; ------------------------------------- | stu_id | name | age | register_date | ------------------------------------- | 3 | alex li | 24 | 2016-03-04 | | 4 | alex li | 24 | 2016-03-01 | | 5 | alex li | 24 | 2016-03-02 | ------------------------------------- 3 rows in set (0.00 sec) 比如这个SQL limit后面跟的是3条数据offset后面是从第3条开始读取 mysql select * from student limit 3 ,1; ------------------------------------- | stu_id | name | age | register_date | ------------------------------------- | 4 | alex li | 24 | 2016-03-01 | ------------------------------------- 1 row in set (0.00 sec) 而这个SQLlimit后面是从第3条开始读读取1条信息。 MySQL where 子句 语法 1 2 SELECT field1, field2,...fieldN FROM table_name1, table_name2... [WHERE condition1 [AND [OR]] condition2..... 以下为操作符列表可用于 WHERE 子句中。 下表中实例假定 A为10 B为20 操作符描述实例等号检测两个值是否相等如果相等返回true(A B) 返回false。, !不等于检测两个值是否相等如果不相等返回true(A ! B) 返回 true。大于号检测左边的值是否大于右边的值, 如果左边的值大于右边的值返回true(A B) 返回false。小于号检测左边的值是否小于右边的值, 如果左边的值小于右边的值返回true(A B) 返回 true。大于等于号检测左边的值是否大于或等于右边的值, 如果左边的值大于或等于右边的值返回true(A B) 返回false。小于等于号检测左边的值是否小于于或等于右边的值, 如果左边的值小于或等于右边的值返回true(A B) 返回 true。 使用主键来作为 WHERE 子句的条件查询是非常快速的。 1 select * from student where register_date 2016-03-04; MySQL UPDATE 查询 语法 1 2 UPDATE table_name SET field1new-value1, field2new-value2 [WHERE Clause] 1 update student set age22 ,nameAlex Li where stu_id3; MySQL DELETE 语句 语法 1 DELETE FROM table_name [WHERE Clause]brbrdelete from student where stu_id5; MySQL LIKE 子句 语法 1 2 3 4 5 6 SELECT field1, field2,...fieldN table_name1, table_name2... WHERE field1 LIKE condition1 [AND [OR]] filed2 somevalue select *from student where name binary like %Li; select *from student where name binary like binary %Li; #只匹配大写 MySQL 排序 1 2 3 4 SELECT field1, field2,...fieldN table_name1, table_name2... ORDER BY field1, [field2...] [ASC [DESC]] 使用 ASC 或 DESC 关键字来设置查询结果是按升序或降序排列。 默认情况下它是按升序排列。 select *from student where name like binary %Li order by stu_id desc; MySQL GROUP BY 语句 1 2 3 4 SELECT column_name, function(column_name) FROM table_name WHERE column_name operator value GROUP BY column_name; 示例 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 mysql SELECT * FROM employee_tbl; ----------------------------------------- | id | name | date | singin | ----------------------------------------- | 1 | 小明 | 2016-04-22 15:25:33 | 1 | | 2 | 小王 | 2016-04-20 15:25:47 | 3 | | 3 | 小丽 | 2016-04-19 15:26:02 | 2 | | 4 | 小王 | 2016-04-07 15:26:14 | 4 | | 5 | 小明 | 2016-04-11 15:26:40 | 4 | | 6 | 小明 | 2016-04-04 15:26:54 | 2 | ----------------------------------------- 接下来我们使用 GROUP BY 语句 将数据表按名字进行分组并统计每个人有多少条记录 mysql SELECT name, COUNT(*) FROM employee_tbl GROUP BY name; ------------------ | name | COUNT(*) | ------------------ | 小丽 | 1 | | 小明 | 3 | | 小王 | 2 | ------------------ 3 rows in set (0.01 sec) 使用 WITH ROLLUP mysql SELECT name, SUM(singin) as singin_count FROM employee_tbl GROUP BY name WITH ROLLUP; ---------------------- | name | singin_count | ---------------------- | 小丽 | 2 | | 小明 | 7 | | 小王 | 7 | | NULL | 16 | ---------------------- 4 rows in set (0.00 sec) 其中记录 NULL 表示所有人的登录次数。br 我们可以使用 coalesce 来设置一个可以取代 NUll 的名称coalesce 语法 mysql SELECT coalesce(name, 总数), SUM(singin) as singin_count FROM employee_tbl GROUP BY name WITH ROLLUP; MySQL ALTER命令 我们需要修改数据表名或者修改数据表字段时就需要使用到MySQL ALTER命令。 删除添加或修改表字段 1 alter table student drop register_date; #从student表删除register_date 字段alter table student add phone int(11) not null; 添加phone字段 修改字段类型及名称 如果需要修改字段类型及名称, 你可以在ALTER命令中使用 MODIFY 或 CHANGE 子句 。 例如把字段 c 的类型从 CHAR(1) 改为 CHAR(10)可以执行以下命令: 1 mysql ALTER TABLE testalter_tbl MODIFY c CHAR(10); 使用 CHANGE 子句, 语法有很大的不同。 在 CHANGE 关键字之后紧跟着的是你要修改的字段名然后指定新字段名及类型。尝试如下实例 1 2 3 mysql ALTER TABLE testalter_tbl CHANGE i j BIGINT; mysql ALTER TABLE testalter_tbl CHANGE j j INT; ALTER TABLE 对 Null 值和默认值的影响 当你修改字段时你可以指定是否包含只或者是否设置默认值。 以下实例指定字段 j 为 NOT NULL 且默认值为100 。 1 2 mysql ALTER TABLE testalter_tbl - MODIFY j BIGINT NOT NULL DEFAULT 100; 修改表名 1 mysql ALTER TABLE testalter_tbl RENAME TO alter_tbl; 关于主键 外键一个特殊的索引用于关键2个表只能是指定内容 1 2 3 4 5 6 7 8 9 10 11 12 13 14 mysql create table class( - id int not null primary key, - name char(16)); Query OK, 0 rows affected (0.02 sec) CREATE TABLE student2 ( id int(11) NOT NULL, name char(16) NOT NULL, class_id int(11) NOT NULL, PRIMARY KEY (id), KEY fk_class_key (class_id), CONSTRAINT fk_class_key FOREIGN KEY (class_id) REFERENCES class (id) ) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 此时如果class 表中不存在id 1,student表也插入不了这就叫外键约束 mysql insert into student2(id,name,class_id) values(1,alex, 1); ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails (testdb.student2, CONSTRAINT fk_class_key FOREIGN KEY (class_id) REFERENCES class (id)) mysql insert into class(id,name) values(1,linux); Query OK, 1 row affected (0.01 sec) mysql insert into student2(id,name,class_id) values(1,alex, 1); Query OK, 1 row affected (0.00 sec) 如果有student表中跟这个class表有关联的数据你是不能删除class表中与其关联的纪录的 mysql delete from class where id 1; ERROR 1451 (23000): Cannot delete or update a parent row: a foreign key constraint fails (testdb.student2, CONSTRAINT fk_class_key FOREIGN KEY (class_id) REFERENCES class (id)) MySQL NULL 值处理 我们已经知道MySQL使用 SQL SELECT 命令及 WHERE 子句来读取数据表中的数据,但是当提供的查询条件字段为 NULL 时该命令可能就无法正常工作。为了处理这种情况MySQL提供了三大运算符:IS NULL: 当列的值是NULL,此运算符返回true。IS NOT NULL: 当列的值不为NULL, 运算符返回true。: 比较操作符不同于运算符当比较的的两个值为NULL时返回true。关于 NULL 的条件比较运算是比较特殊的。你不能使用 NULL 或 ! NULL 在列中查找 NULL 值 。在MySQL中NULL值与任何其它值的比较即使是NULL永远返回false即 NULL NULL 返回false 。MySQL中处理NULL使用IS NULL和IS NOT NULL运算符。 五、事务 MySQL 事务主要用于处理操作量大复杂度高的数据。比如说在人员管理系统中你删除一个人员你即需要删除人员的基本资料也要删除和该人员相关的信息如信箱文章等等这样这些数据库操作语句就构成一个事务 在MySQL中只有使用了Innodb数据库引擎的数据库或表才支持事务事务处理可以用来维护数据库的完整性保证成批的SQL语句要么全部执行要么全部不执行事务用来管理insert,update,delete语句一般来说事务是必须满足4个条件ACID Atomicity原子性、Consistency稳定性、Isolation隔离性、Durability可靠性 1、事务的原子性一组事务要么成功要么撤回。2、稳定性 有非法数据外键约束之类事务撤回。3、隔离性事务独立运行。一个事务处理后的结果影响了其他事务那么其他事务会撤回。事务的100%隔离需要牺牲速度。4、可靠性软、硬件崩溃后InnoDB数据表驱动会利用日志文件重构修改。可靠性和高速度不可兼得 innodb_flush_log_at_trx_commit选项 决定什么时候吧事务保存到日志里。在Mysql控制台使用事务来操作 1 2 3 4 5 mysql begin 开始一个事务 mysql insert into a (a) values(555); mysqlrollback; 回滚 这样数据是不会写入的 当然如果上面的数据没问题就输入commit提交命令就行 六、索引 MySQL索引的建立对于MySQL的高效运行是很重要的索引可以大大提高MySQL的检索速度。 打个比方如果合理的设计且使用索引的MySQL是一辆兰博基尼的话那么没有设计和使用索引的MySQL就是一个人力三轮车。 索引分单列索引和组合索引。单列索引即一个索引只包含单个列一个表可以有多个单列索引但这不是组合索引。组合索引即一个索包含多个列。 创建索引时你需要确保该索引是应用在 SQL 查询语句的条件(一般作为 WHERE 子句的条件)。 实际上索引也是一张表该表保存了主键与索引字段并指向实体表的记录。 上面都在说使用索引的好处但过多的使用索引将会造成滥用。因此索引也会有它的缺点虽然索引大大提高了查询速度同时却会降低更新表的速度如对表进行INSERT、UPDATE和DELETE。因为更新表时MySQL不仅要保存数据还要保存一下索引文件。建立索引会占用磁盘空间的索引文件。 普通索引 创建索引 这是最基本的索引它没有任何限制。它有以下几种创建方式 1 CREATE INDEX indexName ON mytable(username(length)); 如果是CHARVARCHAR类型length可以小于字段实际长度如果是BLOB和TEXT类型必须指定 length。 修改表结构 1 ALTER mytable ADD INDEX [indexName] ON (username(length)) 创建表的时候直接指定 1 2 3 4 5 6 7 8 9 CREATE TABLE mytable( ID INT NOT NULL, username VARCHAR(16) NOT NULL, INDEX [indexName] (username(length)) ); 删除索引的语法 1 DROP INDEX [indexName] ON mytable; 唯一索引 它与前面的普通索引类似不同的就是索引列的值必须唯一但允许有空值。如果是组合索引则列值的组合必须唯一。它有以下几种创建方式 创建索引 View Code 使用ALTER 命令添加和删除索引 View Code 使用 ALTER 命令添加和删除主键 View Code 显示索引信息 1 mysql SHOW INDEX FROM table_name\G 转载于:https://www.cnblogs.com/zhengyuan/p/8906194.html