2022年8月29日

MySQL: 自增字段(AUTO_INCREMENT)的一些常识

在系统开发过程中,我们经常要用到唯一编号。使用过mysql的人都应该知道,mysql有一个定义列为自增的属性:AUTO_INCREMENT。   指定了AUTO_INCREMENT的列必须要建索引,不然会报错,索引可以为主键索引,当然也可以为非主键索引。(不一定要做主键) 1 2 3 mysql> create table t4 (id int auto_increment); ERROR 1075 (42000): Incorrect table definition; there can be only one auto column and it must be defined as a key mysql> 下面的定义把t5表的主键定义为了name,而非自增的id字段 1 2 3 mysql> mysql> create table t5 (id int au…
2022年8月9日

MySQL: 索引

索引分类 (1)普通索引(Key Indexes) (2)唯一索引(Unique Indexes) (3)主键索引(Primary Key Indexes) (4)组合索引(Composite Index) (5)前缀索引( Prefix Indexes) (6)全文索引(Full-Text Indexes) (7)哈希索引(Hash Indexes) (8)空间索引(Spatial Indexes) 普通索引 普通索引是最基本的索引,没什么限制,根据创建时机不同,主要有两种方式: (1)在创建表时同时创建普通索引 CREATE [TEMPORARY] TABLE [IF NOT EXISTS] table_name ( col_name column_definition, INDEX|KEY [index_name] [index_type] (col_name [(leng…
2022年8月3日

MySQL: 实时查看日志

查看MySQL数据库日志可以查看对数据库的操作记录。 MySQL日志文件默认没有产生,需要做如下配置: 1. 编辑配置文件: /etc/mysql/mysql.conf.d$ vim mysqld.cnf # # * Logging and Replication # # Both location gets rotated by the cronjob. # # Log all queries # Be aware that this log type is a performance killer. general_log_file = /var/log/mysql/query.log general_log = 1 2. 重启MySQL服务。 sudo service mysql restart 3. 实时查看日志内容: $ sudo tail -f /var/log/mysql/query.log…
2022年7月3日

MySQL: WITH ROLLUP + HAVING的结果分析

MySQL> select * from stu; +----+--------+-----+--------+--------+---------+-------+--------+ | id | name | age | height | weight | gender | class | del | +----+--------+-----+--------+--------+---------+-------+--------+ | 1 | Tom | 23 | 175.00 | 63.00 | male | cls1 | 0 | | 2 | Bonnie | 26 | 167.00 | 49.00 | female | cls2 | 0 | | 3 | Edith | 27 | 165.00 | 51.00 | female | cls3 | 0 | | 4 | Bert | 52 | | 52.00 | unknown | cls1 | | | 5 | Ken | 27 | | 55.…
2022年7月3日

MySQL: Failed to add the foreign key constraint. Missing index for constraint 'xxx_ibfk_1' in the referenced table 'xxx'

原因: 关联表的关联属性没有建立索引值。 创建外键约束的要求有以下几点: -- 1、父表和子表必须使用相同的存储引擎,而且禁止使用临时表 --具有外键列的表称为子表;子表所参照的表称为父表 -- 2、数据表的默认引擎只能为InnoDB -- 3、外键列和参照列必须具有类似的数据类型。其中数字的长度或是否有符号位必须相同,而字符的长度可以不同 -- 加FOREGIN KEY 关键字的列称为外键列 外键列所参照的列称为参照列 -- 4、外键列和参照列必须建立索引。如果外键列不存在索引的话,MYSQL将自动创建索引。如果参照列不存在索引的话,MySQL不会自动创建索引 -- MySQL会为主键自动创建索引…
2022年7月2日

MySQL: 注释

MySQL注释符有三种: 1、#注释内容,表示单行注释 2、"-- 注释内容" (注意--后面有一个空格) 3、/*注释内容*/ 另外,需要注意以下几点: /* .... */ 在大部分编程语言中都是注释,这个注释之中的语句是不被执行的。但是,在MySQL中为了保持兼容,比如从mysqldump导出的SQL语句能被其它数据库直接使用,它把一些特有的仅在MySQL上的语句放在 /*! ... */ 中,这样这些语句如果在其它数据库中是不会被执行,但在MySQL中它会执行。在这里,*和!之间不能有空格。 语句例如“/*!50701 select * from test */;”,这里的50701表示假设数据库服务器是5.7.01以上版本,该语句才会被执行。 示例如下所示: MySQL [(none)]> /*!select count(*) from mysql…
2022年7月2日

MySQL: mycli 命令自动补全 语法高亮 auto-completion and syntax highlighting

Quick Start If you already know how to install python packages, then you can simply do: $ pip install mycli If you're on macOS you can install it via homebrew. $ brew update && brew install mycli If you're having trouble with the quick start, check the install page for detailed instructions. Usage $ mycli --help Usage: mycli [OPTIONS] [DATABASE] Examples: - mycli my_database - mycli -u my_user -h my_host.com my_databas…
2022年7月1日

MySQL: 数据库中视图和表的区别

数据库中视图和表的区别 视图是已经编译好的sql语句,而表不是; 视图没有实际的物理记录,而表有; 表是内容,视图是窗口; 表占用物理空间而视图不占用物理空间,视图只是逻辑概念的存在,表可以及时对它进行修改,但视图只能用创建的语句来修改; 表是三级模式结构中的概念模式,视图是外模式; 视图是查看数据表的一种方法,可以查询数据表中某些字段构成的数据,只是一些SQL语句的集合,从安全的角度说,视图可以不给用户接触数据表,从而不知道表结构; 表属于全局模式中的表,是实表,视图属于局部模式的表,是虚表; 视图的建立和删除只影响视图本身,不影响对应的基本表; 不能对视图进行update或者insert into操作。 数据库中视图和表的联系 1、视图(view)是在基本表之上建立的表,它的结构(即所定义的列)和内容(即所有数据行)都来自基本表,…
2022年7月1日

MySQL: 常用SQL语句

目录: 1.数据库的相关操作 1.1 连接数据库 1.2 创建数据库 1.3 查看数据库有哪些 1.4 查看指定的数据库 1.5 删除指定的数据库 1.6 使用数据库(很重要) 1.7 用户的创建和删除 1.8 授权 1.9 收权 1.10 视图的创建与删除 1.11 断开服务器的连接 2.表的相关操作 2.1 创建表 2.2 查看表的结构 2.3 查看表的详细信息 2.4 查看某个数据库中有哪些表 2.5 删除指定的表 2.6 字段名的数据类型 2.7 添加主键约束 2.8 添加外键约束 2.9 添加常用约束 3.数据库和表的基本操作 3.1 修改表名 3.2 修改字段名和字段的数据类型 3.3 添加和删除字段 3.4 修改字段的排列位置 3.5 删除表的外键约束 3.6 插入数据(INSERT INTO , VALUES) 3.7 查看数据是否成功插入表中 3.8 更新数据(UPDATE , SET) 3.9 删除数据(DELETE , T…
2022年7月1日

MySQL: 发音

关于 MySQL 到底怎么读,其实在母语是英语的开发者中也是颇有争议的。 有人读 SQL [ˈɛs kjuː ˈɛl],有人读 sequel [ˈsiːkwəl],在 StackExchange 上似乎有一种约定俗成的潜规则,MS的开发者更喜欢读「sequel」,Linux 的开发者喜欢读「SQL」,那么到底怎么读?咱们追根溯源,先了解一下 SQL 的历史。 一. SQL 的历史 - 因商标版权问题被迫改名 SQL 有一段关于 SQL 的有趣历史小故事。SQL 最初是 IBM 在上世纪 70 年代发明的,最初叫 SEQUEL [ˈsiːkwəl] 是「结构化英语查询语言」的简写。 但是后来 IBM 把它改为 SQL [ˈɛs kjuː ˈɛl],因为 SEQUEL 早就已经被一家航空公司注册成商标了,知识产权撞车,被迫改名 SQL 。 二. MySQL 官方发音 在 MySQL 的官方文档里也有一段,写了…