问:MySQL默认的端口号是: 答:3306
问:MySQL中的超级用户叫什么? 答:root

MySQL退出:
1、exit;
2、quit;
3、\q

连接客户端时通过参数指定:
shell>mysql -uroot -proot --prompt提示符
例:如果提示符是“\h”,这代表的是服务器的名称
连上客户端后,通过prompt命令修改:
mysql>prompt 提示符

localhost是本地主机的意思

MySQL提示符

  • \D 完整的日期
  • \d 当前数据库
  • \h 服务器名称
  • \u 当前用户

MySQL常用命令

  • 显示当前服务器版本
  • SELECT VERSION();
  • 显示当前日期
  • SELECT NOW();
  • 显示当前用户
  • SELECT USER();

MySQL语句的规范

  • 关键字与函数名称全部大写
  • 数据库名称、表名称、字段名称全部小写
  • SQL语句必须以分号结尾

数据库的操作

mysql自带四种数据库
1、创建数据库
CREATE{DATABASE | SCHEMA} [IF NOT EXISTS] db_name
[DEFAULT] CHARACTER SET [=] charset_name
其中“{}”代表必须要选择的 “|”代表是可选的
db_name必须要有的

2、查看当前服务器下的数据表列表
SHOW {DATABASES | SCHEMAS}
[LIKE ‘pattern’ | WHERE expr]

3、修改数据库

  • ALTER {DATABASES | SCHEMA} [db_name]
    [DEFAULT] CHARACTER SET [=] charset_name

4、删除数据库

  • DROP {DATABASE | SCHEMA} [IF EXISTS] db_name

数据类型

  • 数据类型是指:列、存储过程参数、表达式和局部变量的数据特征,它决定了数据的存储形式,代表了不同的信息类型

show几个方法的比较
show columns from tb1是用来查看表结构的,查看表字段的类型,主键以及约束等,还可以使用desc tb1或者describe tb1效果一样

show create table t1是用来查看建表语句,通过这个语句我们可以用来查看表的存储引擎,以及字符编码,当然还有一点就是使用外键时,使用这个我们可以查看到外键的名称,这样我们如果想要删除外键,那么我们可以Alter table tb_name drop foreign key 外键约束名(show create table tb_name可以查看外键约束名称)

show indexes from tb1主要是用来查看表的索引的,我们在删除unique key时可以使用该命令来查看索引名称,通过Alter table tb_name drop index/key index_name(通过show index form tb_name查看index_name) 删除唯一约束

创建数据表

  • 数据表(或称表)是数据库最重要的组成部分之一,是其他对象的基础。

USE命令

  • 打开数据库
  • USE数据库名称

创建数据表的命令
CREATE TABLE [IF NOT EXISTS] table_name(
column_name data_type,

)

查看数据表列表

  • SHOW TABLES[FROM db_name]
  • [LIKE ‘pattern’ | WHERE expr]

其中 “FROM db_name” 表示的是不单止可以查看当前数据库下的数据表,还可以查看别的数据库下的数据表

查看数据表的结构
SHOW COLUMNS FROM tbl_name

插入与查找记录

  • INSERT [INTO] tbl_name [(col_name,…)] VALUES(val,…)

自动编号 AUTO_INCREMENT

  • 自动编号,且必须与主键组合使用
  • 默认情况下,起始值为1,每次的增量为1
  • 小数位数必须为0也就是说必须为整数
  • 收到主键的约束

PRIMARY KEY(主键约束)

  • 主键约束
  • 每张数据表只能存在一个主键
  • 主键保证记录的唯一性
  • 主键自动为NOT NULL
  • 主键不一定和 AUTO_INCREAMENT一起使用

UNIQUE KEY唯一约束

  • 唯一约束可以保证记录的唯一性
  • 唯一约束的字段可以为空值(NULL)
  • 每张数据表可以存在多个唯一约束
  • 即使存储多个空值,但是只有一个空值

默认约束 DEFAULT

  • 默认值
  • 当插入记录时,如果没有明确为字段赋值,则自动赋予默认值。

约束

  1. 约束保证数据的完整性和一致性
  2. 约束分为表级约束和列级约束
    只针对某一个字段的约束:列级约束
    针对两个或者两个以上的字段约束:表级约束
  3. 约束类型包括:
    NOT NULL(非空约束)
    PRIMARY KEY(主键约束)
    UNIQUE KEY(唯一约束)
    DEFAULT(默认约束)
    FOREIGN KEY(外键约束)

FOREIGN KEY

  • 保持数据一致性,完整性
  • 实现一对一或者一对多关系

外键约束的要求

  1. 父表和子表必须使用相同的存储引擎,而且禁止使用临时表。
  2. 数据表的存储引擎只能为InnoDB。
  3. 外键列和参照列必须具有相似的数据类型。其中数字的长度或是否有符号位必须相同;而字符的长度则可以不同。
  4. 外键列和参照列必须创建索引。如果外键列不存在索引的话,MySQL将自动创建索引。

外键:如果“公共关键字”(在关系数据库中,关系之间的联系是通过相容或相同的属性或属性组来表示的。如果两个关系中具有相容或相同的属性或属性组,那么这个属性或属性组被称为两个关系的公共关键字)在一个关系中是“主关键字”(是表中的一个或多个字段,它的值用于唯一地标识表中的某一条记录。在两个表的关系中,主关键字用来在一个表中引用来自另一个表中的特定记录),那么这个公共关键字被称为另一个关系的外键,由此可见,外键表示了两个关系之间的相关联系。

编辑数据表的默认存储引擎
MySQL配置文件(在my.ini):
default-storage-engine = INNODB

存储引擎就是数据的存储结构,表是在存储数据的同时,还要组织数据的存储结构,而这些数据的组织结构是由存储引擎决定的。即存储引擎的作用就是规定了数据存储时的存储结构。
MySQL支持的多种存储引擎,可以通过SHOW ENGINES来查看
常用有三种引擎:
1、默认的InnoDB
2、MyISAM
3、MEMORY

子表(从表):具有外键列的表(外键列:加入过FOREIGN KEY)

父表(主表):子表参照的表叫做父表

如果参照列没有索引的话,MySQL将会自动创建索引

mysql 用户超级权限 mysql超级用户的用户名_mysql 用户超级权限


mysql 用户超级权限 mysql超级用户的用户名_mysql 用户超级权限_02


出现150错误是因为和前面 proviences中的id中还有一个UNSIGNED,在这里当中在provience中的pid相当于一个外键,然后在proviences中的pname是参照列,pid是参照 id,所以provience是子类,proviences是父类

外键约束的参照操作

  1. CASCADE:从父表删除或更新且自动删除或更新子表中匹配的行
  2. SET NULL:从父表删除或更新行,并设置子表中的外键列为NULL。如果使用该选项,必须保证子列表没有指定NOT NULL
  3. RESTRICT:拒绝对父表的删除或更新操作
  4. NO ACTION:标准SQL的关键字,在MySQL中与RESTRICT相同

必须先在父表中来插入记录

mysql 用户超级权限 mysql超级用户的用户名_mysql 用户超级权限_03


在这里John的id之所以为4,是因为第一次添加失败之后,但是编号是自动递增了一个1

删除记录是用DELETE命令
定义两张表的结构的,按照存在两张表的结构去定义,而不是使用foreign-key定义,因为在另外的引擎当中,和INNDB是不同的

表级约束与列级约束

对一个数据列建立的约束,称为列级约束
对多个数据列建立的约束,称为表级约束
列级约束既可以在列定义时声明,也可以在列定义后声明
表级约束只能在列定义后声明

列定义:

mysql 用户超级权限 mysql超级用户的用户名_主键_04


其中PRIMARY KEY(‘id’) 就是列定义后面定义了一个主键(或者外键约束),开发过程中用列级约束是比较多的

DEFALUT NOT NULL只存在列级约束

修改数据表
添加单列:
ALTER TABLE tbl_name ADD [COLUMN] col_name
column_definition [FIRST| AFTER col_name]
如果没有声明在哪一列的上方还是下方的话,那么就会添加到最后

删除列:

ALTER TABLE tbl_name DROP [COLUMN] col_name

mysql 用户超级权限 mysql超级用户的用户名_mysql 用户超级权限_05


可以同时删除多个或者进行同时删除和添加的操作,需要的是逗号进行分割

修改数据表
添加主键约束:
ALTER TABLE tbl_name ADD [CONSTRAINT [symbol]] PRIMARY KEY [index_type] (index_col_name,…)

删除主键约束:
ALTER TABLE tbl_name DROP PRIMARY KEY;

删除唯一约束(UNIQUE):
需要注意的是唯一约束是可以有多个的
首先用 SHOW INDEXES FROM tbl_name; 查看
输入 ALTER TABLE tbl_name DROP INDEXES username;
注意删除的是约束,而不是字段!!!

删除外键约束:
ALTER TABLE tbl_name DROP FOREIGN KEY fk_symbol;
删除外键约束的索引:
ALTER TABLE tbl_name DROP INDEX pid;

修改列定义(若某个字段上出现了名字或者类型上的出错)
ALTER TABLE tbl_name MODIFY [COLUMN] col_name
column_definition [FIRST | AFTER col_name]

修改列名称
ALTER TABLE tbl_name CHANGE col_name new_col_name
column_definition

数据表更名
方法1:
ALTER TABLE tbl_name RENAME[TO| AS]new tbl_name;

方法2(对多张数据表进行修改):
RENAME TABLE tbl_name TO new_tbl_name
[, tbl_name2 TO new_tbl_name2]…

如果为像“id”一样自动赋值的字段,可以不赋值(即赋值NULL)

mysql 用户超级权限 mysql超级用户的用户名_外键_06


mysql 用户超级权限 mysql超级用户的用户名_主键_07

“md5”是php的函数,计算字符串的哈希

mysql 用户超级权限 mysql超级用户的用户名_mysql 用户超级权限_08


插入多条记录的写法

INSERT第二种用法:
插入记录:
INSERT [INTO] tbl_name SET col_name = {expr |DEFAULT},…
说明:与第一种方法的区别在于,此方法可以使用子查询(subQuery)
这里的SET是指SELECT语句,这里就是将查找的结果存储到指定的数据表
另外的区别在于,第一种方式插入多条记录,这个只能插入一条记录

第三种用法:
INSERT [INTO] tbl_name [(col_name,…)] SELECT…
此方法可以将查询结果插入到指定数据表。

方法记录书写记录之后,如果发现值有错,需要更改使用UPDATE

UPDATE更新记录(单表更新)

UPDATE[LOW_PRORITY] [IGNORE]

mysql 用户超级权限 mysql超级用户的用户名_mysql 用户超级权限_09


mysql 用户超级权限 mysql超级用户的用户名_外键_10


以上是关于UPDATE(WHERE)的使用注意如果省去where条件,将会对整个表的数据进行操作

删除记录 DELETE

DELETE FROM tbl_name [WHERE where_condition]

delete同样和where一同使用,和update一样,如果省去了where条件,就会对整个数据表进行修改。

mysql 用户超级权限 mysql超级用户的用户名_MySQL_11


mysql 用户超级权限 mysql超级用户的用户名_MySQL_12


可发现用了DELETE语句之后,删除id = 6 然后再进行添加的时候,是在最大编号的+1

SELECT (查找记录)
SELECT select_expr [,select_expr…]
[
FROM table_references
[WHERE where_condition]
[GROUP BY {col_name | position} [ASC | DESC],…]
[HAVING where_condition]
[ORDER BY {col_name | expr |position}[ASC | DESC],…]
[LIMIT {[offset,] row_count | row_count OFFSET offset}]
]

select_expr
查询表达式:
每一个表达式表示想要的一列,必须有至少一个。
多个列之间以英文逗号分隔
星号()表示所有列。 tbl_name. 可以表示命名表的所有列。
查询表达式可以使用[AS] alias_name为其赋予别名。
别名可用于GROUP BY, ORDER BY 或 HAVING子句

mysql 用户超级权限 mysql超级用户的用户名_MySQL_13


可以看出上面的图片中 使用AS关键字是十分有必要的,如果像是在下面的语句一样没有加逗号,系统会默认认为赋予了别名。

WHERE
条件表达式:对记录进行过滤,如果没有指定WHERE子句,则显示所有记录,在where表达式中,可以使用MySQL 支持的函数或运算符。

GROUP BY
查询结果分组:可以指代列名/位置
[GROUP BY{col_name | position} [ASC | DESC],…]
其中ASC为升序,DESC为降序。

HAVING(分组条件)
[HAVING where_condition]
聚合函数:max min 求最大值、最小值、平均值。。。因为它只有一个返回值

ORDER BY 对查询结果进行排序
[ORDER BY{col_name | expr | position}[ASC | DESC ],…]

LIMIT 限制查询结果返回的数量

[LIMIT {[offset,] row_count | row_count OFFSET offset}]

这里的排序是从0开始

mysql 用户超级权限 mysql超级用户的用户名_外键_14

mysql 用户超级权限 mysql超级用户的用户名_主键_15


上面这个是关于INSERT …SELECT语句导入别的数据表当中,第一次报错是因为,在test数据表当中,有两列,所以值是不匹配的,需要指定特定的列。