MySQL基础(一)

一、MySQL基础 这里写目录标题一、MySQL基础1、数据库、数据库管理系统、数据库系统、数据库管理员介绍2、元组、码、候选码、主码、外码、主属性、非主属性介绍3、主键和外键的区别?4、为什么不推荐使用外键与级联?5、ER图6、数据库范式7、数据库存储过程8、drop、delete和truncate有什么区别?9、数据库设计?10、字符集介绍1.何为字符集?2.有哪些常见的字符集?3.MySQL字符集11、关系型数据库介绍12、MySQL介绍 一、MySQL基础 1、数据库、数据库管理系统、数据库系统、数据库管理员介绍 数据 阅读详情

目录

数据库基础

库的操作

表的操作

数据类型

表的约束

一、MySQL在Centos 7环境安装

su -    //切换成超级用户

ps axj | grep mysql 
systemctl stop mysqld 

rpm -qa | grep mysql | xargs yum -y remove 
//repo.mysql.com 网址 

cat /etc/*release mkdir mysql /

/下载对应的mysql版本

​

//安装yum源

​

yum list | grep mysql     //查看mysql是否生效

//安装mysql
yum install -y mysql-community-server

//秘钥过期解决方法如下

systemctl start mysqld  //启动mysql
ps ajx | grep mysqld
netstat -nltp           //查服务端口号

//登录方式

vim /etc/my.cnf        //打开配置文件
//最后一行加入:skip-grant-tables,并保存退出
systemctl restart mysqld       //重新启动
mysql -u root -p       //直接无密码登录

/var/lib/mysql               //默认     存储位置
//配置my.cnf,主要是数据库客户端和服务器的编码格式
//如下图
vim /etc/my.cnf

//character-set-server=utf8   客户端的编码格式
//default-storage-engine=innodb   默认存储引擎

systemctl restart mysqld   //重启
netstat -nltp

二、数据库基础

//连接

mysql -h 127.0.0.1 -P 3306 -u root -p
//-h 指明登录部署了mysql服务的主机   
//-P 指明要访问的端口号 
//-u 指明登录用户 -p 指明需要输出入密码
quit  //退出

//目前是免密码登录的,后面必须设置密码;密码输入的时候,是不会回回显的

     MySQL 是数据库的服务端 MySQLd 是数据库服务的服务器端 MySQL本质: 基于C(mysql)S(mysqld) 模式的一种网络服务 MySQL 是一套提供数据存取服务的网络程序 数据库一般指的是,在磁盘或者内存中存储的特定结构组织的数据--将来在磁盘上存储的一套数据库方案 数据库服务--mysqld 一般的文件提供了数据的存储功能,但是文件并没有提供很好的数据管理能力(用户角度) 数据库本质:对数据内容存储的一套解决方案,

  服务器、数据库、表关系

    所谓安装数据库服务器(mysqld),只是在机器上安装了一个数据库管理系统程序,这个管理程序可以管理多个数据库,一般开发人员会针对每一个应用创建一个数据库;

  为保存应用中实体的数据,一般会在数据库中创建多个表,以保存程序中实体的数据;

     数据库服务器、数据库和表的关系如下:

  SQL分类

    DDL:data definition language ,数据定义语言,用来维护存储数据的结构, eg:create drop alter

    DML: data manipulation language, 数据操纵语言,用来对数据进行操作,eg:insert delete,update,DML中又单独分了一个DQL,数据查询语言,eg:select

    DCL:data control language, 数据控制语言,主要负责权限管理和事务,eg:grant revoke commit

  存储引擎

    存储引擎是,数据库管理系统如何存储数据,如何为存储的数据建立索引和如何更新、查询数据等技术的实现方法;

    MySQL的核心就是插件式存储引擎,支持多种存储引擎

​

三、MySQL操作库

  显示数据库 : show databases;

  创建数据库 : create database if not exists db_name; --本质就是在/var/lib/mysql 创建一个目录

  删除数据库 : drop database db_name; --删除目录

  编码集

  创建数据库的时候,有两个编码集:

  1.数据库编码集,数据库未来存储数据

  2.数据库校验集,支持数据库,进行字段比较使用的编码,本质也是一种读取数据库中的数据采用的编码格式

即:数据库无论对数据做任何操作,都必须保证操作和编码是编码一致的

//查看默认编码规则
show variables like 'character_set_database';

//查看默认校验规则
show variables like 'collation_database';
 
//查看数据库支持的字符集编码规则
show charset;

//查看数据库支持的字符集校验规则
show collation;

//当创建数据库没有指定字符集和校验规则时,系统默认字符集:utf8,校验规则是:utf8_general_ci
//创建一个使用utf8字符集的 数据库
create database db2 charset=utf8;
//创建一个shiyongutf8字符集,并带校对规则db3 数据库
create database db3 charset=utf8 collate utf8_general_ci

   校验集是会影响结果滴

system clear         //在mysql里清页面
//增
create database test1 collate utf8_general_ci;//utf8_general_ci 不区分大小写
create database test1 collate utf8_general_bin;//utf8_general_bin 区分大小写
use test1;         //!!!!!!
create table if not exists person (name varchar(20));
show tables;
desc person;
insert into person (name) values ('a');
insert into person (name) values ('A');
...
select * from person;     //查看内容
select * from person where name='a';
select * from person order by name;

操纵数据库

show databases;    //查看数据库

show create databases 数据库名;    //显示创建数据库

//数据库删除
drop database [if exists] db_name;
//执行删除后的结果:数据库内部看不到对应的数据库,对应的数据库文件夹被删除,级联删除,里面的数据表全部被删

use db_name;
show tables;

select database();  //查看在哪个数据库下

//修改数据库  对数据库的修改主要指修改数据库的字符集,校验规则
cat db_name/db.opt    //打印编码集
alter database db_name;
eg: alter database test charset=gbk collate gbk_chinese_ci;
show create database db_name;  //显示创建的编码规则

  备份和删除

show databases;
use db_name;
show tables;
select * from table_name;    //打印表内容

//备份
mysqldump -P3306 -u root -p 密码 -B 数据库名 > 数据库备份存储的文件路径
eg: mysqldump -P3306 -u root -p  -B mytest > mytest.sql  //会备份在当前目录下
其实是把整个创建数据库,建表,导入数据的语句都装载这个文件中

ls /var/lib/mysql   //查看

//还原 例子
mysql> source /home/mysql/mytest.sql;

//备份其中一张表
mysqldump -u root -p 表名1 表名2 > /../XX.sql;
//同时备份多个数据库
mysqldump -u root -p -B db_name1 db_name2 .. >  数据库存放路径 ;
//如果备份一个数据库时,没有带上-B 参数,在恢复数据库时,需要先创建空数据库,然后使用数据库,再   使用source 来还原


show processlist;     //查看连接情况

四、表结构的操作(DDL)

  创建表

crate table [if not exists] table_name(
    field1 datatype,
    field2 datatype,
    field3 datatype
) character set 字符集 collate 校验规则 engine 存储引擎;

//创建表案例
create table if not exists users(
    id int,
    name varchar(20) comment '用户名',
    password char(32) comment '密码是32位的md5值',
    birthday date comment '生日'
) character set utf8 collate utf8_general_ci engine MyISAM;
//charset=utf8 collate=utf8_general_ci engine InnoDB;   //默认存储引擎

//不同的存储引擎,创建表的文件不一样,users表存储引擎是MyISAM,在数据目中有三个不同的文件,分    别是 users.frm : 表结构  users.MYD : 表数据  users.MYI : 表索引 

  查看表

select database();    //显示所在数据库

show tables;          //显示数据库有几张表

desc table_name;      //表信息     desc==describe

show create table table_name \G  //显示创建表的详细语句

  修改表

    修改某个表的结构,比如字段名字、字段大小、字段类型、表的字符集类型,表的存储引擎等,还有添加字段、删除字段等等。

alter table old_table_name rename to new_table_name;    //修改表名

insert into table_name values (int,'XXXXX',...);     //输入信息

select * from table_name;    //打印表

alter table table_name add XX列名X varchar(128) comment 'XXXX' after 某列名;//添加列

alter table table_name modify XXXX  varchar(60); //覆盖式修改列,这样comment会丢失

alter table table_name drop XXXXX;   //删除字段要注意,删除字段机器对应的列数据都没了

alter table table_name change name xingming varchar(60) DEFAULT NULL; //改列名要带上属性

  删除表

drop table table_name;

五、数据类型

   分类

分类

数据类型

说明

数值类型

BIT(M)

位类型,M指定位数,默认值1,范围1-64

TINYINT [UNSIGNED]

带符号的范围-128~127,无符号范围0~255,默认有符号;1字节

BOOL

使用0和1表示真和假

SMALLINT [UNSIGNED]

带符号是-2^15 -- 2^15-1, 无符号是 2^16-1;2字节

INT [UNSIGNED]

带符号是-2^31 -- 2^31-1, 无符号是 2^32-1;4字节

BIGINT [UNSIGNED]

带符号是-2^63 -- 2^63-1, 无符号是 2^64-1;8字节

FLOAT [(M,D)] [UNSIGNED]

M指定显示长度,d指定小数位数,占用4字节

DOUBLE [(M,D)] [UNSIGNED]

表示比float精度更大的小数,占用空间8字节

DECIMAL(M,D) [UNSIGNED]

定点数M指定长度,D表示小数点的位数

文本、二进制类型

CHAR(size)

固定长度字符串,最大255

VARCHAR(size)

可变长度字符串,最大长度65535

BLOB

二进制数据

TEXT

大文本,不支持全文索引,不支持默认值

时间日期

DATA/DATATIME/TIMESTAMP

日期类型(yyyy-mm-dd,(yyyy-mm-dd hh:mm:ss) timestamp时间戳

String类型

ENUM类型

ENUM是一个字符串对象,其值来自表创建时在列规定中显示枚举的一列值

SET类型

SET是一个字符串对象,可以有零或多个值,其值来自表创建时规定的允许的一列值,指定包括多个set成员的set列值时各成员之间用逗号隔开。这样set成员值本身不能包含逗号。

数据类型

  如果向mysql特定的类型中插入不合法的数据,MySQL一般直接拦截,不允许做对应的操作。反过来,如果已经有数据被成功插入到mysql中,一定插入的时候是合法的。

  所以,在MySQL中,数据类型一般也是一种: 约束。 约束:保证数据插入的合法性。

  保证数据库中的数据是可预期的,完整的。

  MySQL表中建立属性列,列名称在前,类型在后。

  尽量不使用unsigned。

bit

​

​

float

float[(m,d)] [unsigned] : M指定显示长度,d指定小数位数,占用空间4个字节
//四舍五入
//float 表示的精度大约是7位

decimal

deciaml[(m,d)] [unsigned] :定点数m指定长度,d表示小数点的位数
//decimal 整数最大位数为65,支持小数最大位数d是30。如果d被省略,默认为0;如果m被省略,默认是10.

字符串类型

char

char(L):固定长度字符串,L是可以存储的长度,单位为字符,最大长度值为255

varchar

varchar(L):可变长度字符串,L表示字符长度,最大长度为65535个字节
//关于varchar(len),len到底是多大,这个len值,和标的编码密切相关:
    varchar长度可以指定为0到65535之间的值,但是 1-3个字节用于记录数据大小,所以说有效字节数是65532
    当表的编码是utf8时,varchar(n)的参数n最大值是65532/3=21844(因为utf8中,一个字符占用3个字节),如果编码是gbk,varchar(n)的参数n最大是65532/2=32766(因为gbk中,一个字符占用2个字节)
//varchar会多占用一两个字节,用以记录字符串长度

日期和时间类型

常用的日期有如下三个:
data: 日期,'yyyy-mm-dd' ,占用三字节
datatime: 时间日期格式  'yyyy-mm-dd HH:ii:ss' 表示范围从1000到9999,占用8字节
timestamp:时间戳,从1970年开始的'yyyy-mm-dd HH:ii:ss'格式 和 datatime 完全一致,占用四字节


//
updata table_name set field='xxxxxxxx'   //filed是表中元素名

enum 和 set

  • enum: 枚举,单选类型

  • set: 集合,多选类型

    mysql> create table if not exists votes (
        -> username varchar(30),
        -> gender enum('男','女'),
        -> hobby set('代码','羽毛球','乒乓球','足球','游泳')
        -> );
    insert into votes values ('张飞', '男', '代码');
    insert into votes values ('林宇', 1, '代码');
    
    
    mysql> select * from votes;
    +----------+--------+--------+
    | username | gender | hobby  |
    +----------+--------+--------+
    | 张飞     | 男     | 代码   |
    | 林宇     | 男     | 代码   |
    +----------+--------+--------+
    2 rows in set (0.00 sec)
    
    insert into votes values('xxx',2,yyy);  //yyy用二进制,类似于位段来表示,如7,即是111,就                                           是代码 羽毛球 乒乓球
    
    select * from votes where gender='女';
    select * from votes where gender=2;
    
    集合查询使用find_in_set函数
    //find_in_set(sub,str_list):如果sub在str_list中,则返回下标;如果不在,返回0;str_list用
    //逗号分隔的字符串;
    select * from votes where find_in_set('羽毛球',hobby);
    
    mysql> select * from votes;
    +----------+--------+-------------------------+
    | username | gender | hobby                   |
    +----------+--------+-------------------------+
    | 张飞     | 男     | 代码                     |
    | 林宇     | 男     | 代码                     |
    | 张三     | 女     | 足球,游泳                |
    | 张三     | 女     | 足球,游泳                |
    | 张三     | 女     | 羽毛球,足球,游泳          |
    | 李四     | 女     | 羽毛球,足球,游泳          |
    | ss       | 女     | 羽毛球                   |
    +----------+--------+-------------------------+
    
    mysql> select * from votes where hobby='羽毛球';
    +----------+--------+-----------+
    | username | gender | hobby     |
    +----------+--------+-----------+
    | ss       | 女     | 羽毛球     |
    +----------+--------+-----------+
    
    mysql> select * from votes where find_in_set('羽毛球',hobby);
    +----------+--------+-------------------------+
    | username | gender | hobby                   |
    +----------+--------+-------------------------+
    | 张三     | 女     | 羽毛球,足球,游泳          |
    | 李四     | 女     | 羽毛球,足球,游泳          |
    | ss       | 女     | 羽毛球                   |
    +----------+--------+-------------------------+
    
    select * from votes where find_in_set('羽毛球',hobby) and find_in_set('代码',hobby);

六、表的约束

    真正约束字段的是数据类型,但是数据类型约束很单一,需要有一些额外的约束,更好的保证数据的合法性,从业务逻辑角度保证数据的正确性。

    表的约束很多,主要介绍如下:null/not null, default,comment, zerofill, primary key, auto_increment, unique key.

    表的约束:表中一定要有各种约束,通过约束,让未来插入数据库中的数据是符合预期的。约束本质是通过技术手段,倒逼程序员,插入正确的数据。反过来,站在mysql的视角,凡是插入进来的数据,都是符合数据约束的!

    约束的最终目标:保证数据的完整性和可预期性。

  空属性

  • 两个值:null (默认的)和 not null (不为空);

  • 数据库默认字段基本都是字段为空,但是实际开发时,尽可能保证字段不为空,因为数据为空无法参与运算

mysql> create table if not exists myclass(
    -> class_name varchar(20) not null,    //not null 不允许为空
    -> class_room varchar(20) not null,
    -> other varchar(20)
    -> );
Query OK, 0 rows affected (0.01 sec)

mysql> desc myclass;
+------------+-------------+------+-----+---------+-------+
| Field      | Type        | Null | Key | Default | Extra |
+------------+-------------+------+-----+---------+-------+
| class_name | varchar(20) | NO   |     | NULL    |       |
| class_room | varchar(20) | NO   |     | NULL    |       |
| other      | varchar(20) | YES  |     | NULL    |       |
+------------+-------------+------+-----+---------+-------+
3 rows in set (0.01 sec)

mysql> show create table myclass \G
*************************** 1. row ***************************
       Table: myclass
Create Table: CREATE TABLE `myclass` (
  `class_name` varchar(20) NOT NULL,
  `class_room` varchar(20) NOT NULL,
  `other` varchar(20) DEFAULT NULL    //未设置,但是系统自动加了默认为空
) ENGINE=InnoDB DEFAULT CHARSET=utf8

  默认值

  某一种数据会经常性的出现某个具体的值,可以在一开始就指定好,在需要真实数据的时候,用户可以选择性的使用默认值。

  默认值生效:数据再插入时不给该字段赋值,就是用默认值。

mysql> create table if not exists t4(
    -> name varchar(20) not null,
    -> age tinyint unsigned default 18,
    -> gender char(1) default '男'
    -> );
Query OK, 0 rows affected (0.01 sec)

mysql> desc t4;
+--------+---------------------+------+-----+---------+-------+
| Field  | Type                | Null | Key | Default | Extra |
+--------+---------------------+------+-----+---------+-------+
| name   | varchar(20)         | NO   |     | NULL    |       |
| age    | tinyint(3) unsigned | YES  |     | 18      |       |
| gender | char(1)             | YES  |     | 男      |       |
+--------+---------------------+------+-----+---------+-------+
3 rows in set (0.00 sec)

  default:如果设置了,用户将来插入,有具体的数据,就用用户的,没有就用默认的。

  not null 和 default 一般不需要同时出现,因为dafault 本身有默认值,不会为空。

列描述

  comment,没有实际含义,专门用来描述字段,会根据表创建语句保存,用来给程序员或DBA来进行了解

  通过desc看不到注释信息,要通过 show create table table_name \G 来查看

zerofill

  格式化显示

mysql> create table if not exists t5( 
    a int unsigned not null,
    b int unsigned not null
     );
Query OK, 0 rows affected (0.02 sec)

mysql> desc t5;
+-------+------------------+------+-----+---------+-------+
| Field | Type             | Null | Key | Default | Extra |
+-------+------------------+------+-----+---------+-------+
| a     | int(10) unsigned | NO   |     | NULL    |       |
| b     | int(10) unsigned | NO   |     | NULL    |       |
+-------+------------------+------+-----+---------+-------+
2 rows in set (0.00 sec)

mysql> show create table t5 \G
*************************** 1. row ***************************
       Table: t5
Create Table: CREATE TABLE `t5` (
  `a` int(10) unsigned NOT NULL,
  `b` int(10) unsigned NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.00 sec)


mysql> insert into t5 (a,b) values ('1','2');
Query OK, 1 row affected (0.01 sec)

mysql> select * from t5;
+---+---+
| a | b |
+---+---+
| 1 | 2 |
| 1 | 2 |
+---+---+
2 rows in set (0.00 sec)

mysql> alter table t5 modify b int unsigned zerofill not null;
Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> desc t5;
+-------+---------------------------+------+-----+---------+-------+
| Field | Type                      | Null | Key | Default | Extra |
+-------+---------------------------+------+-----+---------+-------+
| a     | int(10) unsigned          | NO   |     | NULL    |       |
| b     | int(10) unsigned zerofill | NO   |     | NULL    |       |
+-------+---------------------------+------+-----+---------+-------+
2 rows in set (0.00 sec)

mysql> select * from t5;
+---+------------+

| a | b          |
+---+------------+
| 1 | 0000000002 |
| 1 | 0000000002 |
+---+------------+
//数值前面多了九个0,这既是zerofill属性的作用,如果宽度小于设定的宽度,自动填充0。要注意的是,这只是最后显示的结果,在MySQL中实际存储的还是1,

主键

    primary key 用来唯一的约束该字段里面的数据,不能重复,不能为空,一张表中最多只能有一个主键;

    主键所在的列通常是整数类型。

mysql> create table if not exists t6(
    -> id int unsigned primary key comment '学号',
    -> name varchar(20) not null
    -> );
Query OK, 0 rows affected (0.02 sec)

mysql> desc t6;
+-------+------------------+------+-----+---------+-------+
| Field | Type             | Null | Key | Default | Extra |
+-------+------------------+------+-----+---------+-------+
| id    | int(10) unsigned | NO   | PRI | NULL    |       |
| name  | varchar(20)      | NO   |     | NULL    |       |
+-------+------------------+------+-----+---------+-------+
2 rows in set (0.00 sec)

mysql> show create table t6 \G
*************************** 1. row ***************************
       Table: t6
Create Table: CREATE TABLE `t6` (
  `id` int(10) unsigned NOT NULL COMMENT '学号',
  `name` varchar(20) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8

mysql> select * from t6;
+----+--------+
| id | name   |
+----+--------+
|  1 | 张飞   |
+----+--------+
1 row in set (0.00 sec)

mysql> insert into t6 values (1,'张飞');   //不可再插入 id = 1
ERROR 1062 (23000): Duplicate entry '1' for key 'PRIMARY'
mysql> insert into t6 values (2,'刘备');
Query OK, 1 row affected (0.00 sec)

mysql> update t6 set name='吕布' where id = 2;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> select * from t6;
+----+--------+
| id | name   |
+----+--------+
|  1 | 张飞   |
|  2 | 吕布   |
+----+--------+
2 rows in set (0.00 sec)

mysql> select * from t6 where id = 2;
+----+--------+
| id | name   |
+----+--------+
|  2 | 吕布   |
+----+--------+
1 row in set (0.00 sec)


mysql> alter table t6 drop primary key;   //删除主键
Query OK, 2 rows affected (0.05 sec)
Records: 2  Duplicates: 0  Warnings: 0

mysql> desc t6;
+-------+------------------+------+-----+---------+-------+
| Field | Type             | Null | Key | Default | Extra |
+-------+------------------+------+-----+---------+-------+
| id    | int(10) unsigned | NO   |     | NULL    |       |
| name  | varchar(20)      | NO   |     | NULL    |       |
+-------+------------------+------+-----+---------+-------+
2 rows in set (0.00 sec)

mysql> alter table t6 add primary key(id);  //增加主键

  在创建表的时候,在所有字段之后,使用primary key(主键字段列表)来创建主键,如果有多个字段作为主键,可以使用复合主键;

mysql> create table pick_course(
    -> id int unsigned,
    -> course_id int unsigned comment '课程编号',
    -> grade tinyint unsigned comment '学生的课程分数',
    -> primary key (id,course_id)
    -> );
Query OK, 0 rows affected (0.03 sec)

mysql> desc pick_course;
+-----------+---------------------+------+-----+---------+-------+
| Field     | Type                | Null | Key | Default | Extra |
+-----------+---------------------+------+-----+---------+-------+
| id        | int(10) unsigned    | NO   | PRI | NULL    |       |
| course_id | int(10) unsigned    | NO   | PRI | NULL    |       |
| grade     | tinyint(3) unsigned | YES  |     | NULL    |       |
+-----------+---------------------+------+-----+---------+-------+
3 rows in set (0.00 sec)

自增长

auto_increment :当对应的字段,不给值,会自动的被系统触发,系统会从当前字段中已经有的最大值+1操作,得到一个新的不同的值。通常和主键搭配使用,作为逻辑主键。

自增长的特点:

  • 任何一个字段要做自增长,前提是本身是一个索引

  • 自增长字段必须是整数

  • 一张表最多只能有一个自增长

    mysql> create table if not exists tt21(
        -> id int unsigned primary key auto_increment,
        -> name varchar(20) not null
        -> );
    Query OK, 0 rows affected (0.03 sec)
    
    mysql> desc tt21;
    +-------+------------------+------+-----+---------+----------------+
    | Field | Type             | Null | Key | Default | Extra          |
    +-------+------------------+------+-----+---------+----------------+
    | id    | int(10) unsigned | NO   | PRI | NULL    | auto_increment |
    | name  | varchar(20)      | NO   |     | NULL    |                |
    +-------+------------------+------+-----+---------+----------------+
    2 rows in set (0.00 sec)
    
    mysql> insert into tt21 (name) values ('a');
    Query OK, 1 row affected (0.03 sec)
    
    mysql> insert into tt21 (name) values ('b');
    Query OK, 1 row affected (0.01 sec)
    
    mysql> insert into tt21 (name) values ('c');
    Query OK, 1 row affected (0.00 sec)
    
    mysql> select * from tt21;
    +----+------+
    | id | name |
    +----+------+
    |  1 | a    |
    |  2 | b    |
    |  3 | c    |
    +----+------+
    3 rows in set (0.00 sec)
    
    
    mysql> create table tt22(
        -> id int unsigned primary key auto_increment,
        -> name varchar(20) not null
        -> ) auto_increment = 500;
    Query OK, 0 rows affected (0.02 sec)
    
    mysql> show create table tt22;
    +-------+-------------+
    | Table | Create Table|
    +-------+-----------------------------------------------+
    | tt22  | CREATE TABLE `tt22` (
      `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
      `name` varchar(20) NOT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=500 DEFAULT CHARSET=utf8 |
    +-------+-----------------------------------------------+
    1 row in set (0.00 sec)
    
    //不设置时,自动从 1 开始,插入一个数值后,就会从插入的数值开始计数
    
    select last_insert_id();  //查看auto_increment

  索引

    在关系数据库中,索引是一种单独的、物理的对数据库表中一列的值进行排序的一种存储结构,它是某个表中一列或若干列值的集合和相应的指向表中物理标识这些纸的数据页的逻辑指针清单。索引的作用相当于图书的目录,可以根据目录中的页码快速找到所需的内容。

    索引提供指向存储在表的指定列中的数据值的指针,然后根据指定的排列顺序对这些指针排序。数据库使用索引以找到特定值,然后顺指针找到包含该值的行,这样可以使对应于表的SQL语句执行得更快,可快速访问数据库表中的特定信息。

唯一键

  一张表中往往有很多字段需要唯一性,数据不能重复,但是一张表中只能有一个主键:唯一键就可以解决表中有多个字段需要唯一性约束的问题。

  唯一键的本质和主键差不多,唯一键允许为空,而且可以多个为空,空字段不作唯一性比较。

mysql> create table stu( 
       id char(20) unique comment '这是一个学生的唯一键', 
       name varchar(32) not null 
       );
Query OK, 0 rows affected (0.03 sec)

mysql> desc stu;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | char(20)    | YES  | UNI | NULL    |       |
| name  | varchar(32) | NO   |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
2 rows in set (0.01 sec)

外键

  外键用于定义主表和从表之间的关系:外键约束主要定义在从表上,主表则必须是有主键约束或unique约束。当定义外键后,要求外键列数据必须在主表的主键列存在或为null。

foreign key(字段名) references 主表(列)

mysql> create table if not exists class(
    -> id int primary key,
    -> name varchar(32) not null
    -> );
Query OK, 0 rows affected (0.02 sec)

mysql> desc class;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int(11)     | NO   | PRI | NULL    |       |
| name  | varchar(32) | NO   |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
2 rows in set (0.00 sec)

mysql> create table if not exists student(
    -> id int unsigned primary key,
    -> name varchar(20) not null,
    -> telphone varchar(32) unique key,
    -> class_id int,
    -> foreign key(class_id) references class(id)
    -> );
mysql> desc student;
+----------+------------------+------+-----+---------+-------+
| Field    | Type             | Null | Key | Default | Extra |
+----------+------------------+------+-----+---------+-------+
| id       | int(10) unsigned | NO   | PRI | NULL    |       |
| name     | varchar(20)      | NO   |     | NULL    |       |
| telphone | varchar(32)      | YES  | UNI | NULL    |       |
| class_id | int(11)          | YES  | MUL | NULL    |       |
+----------+------------------+------+-----+---------+-------+
4 rows in set (0.00 sec)

MySql基础一之【了解MySql与DBeaver操作MySql】 本篇为MYSQL数据库基础了解系列的第一篇,为对MySQL的了解与DBeaver操作MySQL; 阅读详情

相关推荐

深入解析MySQL:一图彻底理解MySQL的基础架构

连接处理和授权主要负责处理客户端与MySQL服务器之间的连接,包括连接的建立、维护和断开。同时,它还负责验证客户端的授权信息,确保只有拥有合适权限的用户才能访问数据库。本文深入解析了MySQL的基础架构,包括连接处理和授权、查询处理、查询优化和执行、存储引擎等模块。理解这些模块的工作原理和特性,可以帮助我们更好地使用和优化MySQL。

博客 1433

mysql -uroot -p报错原因

等),可能会出现问题。如果MySQL的配置文件中存在错误或不正确的参数设置,也可能导致登录命令无法正常工作。可以检查MySQL配置文件(通常是my.cnf或my.ini)中的设置,并确保它们是正确的。但是又试了一下将密码放在-p后面却报错了,仔细核对了一下发现密码是正确的啊,到底是哪里出问题了呢,去网上搜了一下没有得到自己想要的答案,所以我在这里总结一下出现这种情况的原因。你可以尝试在MySQL安装目录中进入bin目录,然后执行命令。今天在执行mysql导出的时候,正常输入密码发现是没问题的。

weixin_52796198的博客 2005

从智能手机到汽车电子:聊聊IPC-9702/9704A标准如何帮我们搞定不同场景下的PCB可靠性设计

本文探讨了IPC-9702/9704A标准在智能手机和汽车电子等不同场景下的PCB可靠性设计应用。通过分析消费电子、汽车电子和工业设备中的应力特征,详细解读了IPC标准在应变识别和测试方法论中的核心价值,并提供了具体的轻量化设计策略和全生命周期验证方案,帮助工程师提升PCB的长期可靠性。

weixin_30693683的博客 279

netstat mysql_mysql netstat

netstat命令是一个监控TCP/IP网络的非常有用的工具,它可以显示路由表、实际的网络连接以及每一个网络接口设备的状态信息输出结果可以分为两个部分,一个是Active Internet connections,另一个是Active UNIX domain sockets.[root@DBSVR02 conf]# netstatActive Internet connections (w/o s...

weixin_39770311的博客 195

信号输入到底要不要接GND?单端与差分输入的接地选择与抗干扰分析

在电子工程与工业现场中,接地是信号完整性的基石。电压本身是相对值,任何测量都需要一个公共参考点,这就是地(GND)在信号输入中的核心作用。单端输入依赖信号源与接收端共地,以GND为基准还原信号;差分输入则直接测量两根信号线之间的差值,天然不依赖本地地电位,因此能有效抑制共模干扰和地环路噪声。实际选型时,需要根据传感器类型、传输距离、地电位差大小权衡:短距离共地良好的场景可用单端,长距离或高干扰环境应优先考虑差分或隔离方案。本文从接地原理出发,结合实际接线与故障排查经验,帮助工程师在PLC、采集卡和传感器链路

weixin_28703507的博客 311

VMware17安装教程(附安装包)VMware17小白详细一键安装教程

VMware 17.5 是一款强大的虚拟机软件。本安装教程将为您详细介绍VMware17安装教程其下载、安装步骤及验证方法,助您轻松完成安装,开启虚拟化体验。

2501_91538706的博客 2万+

netstat mysql_mysql-netstat

在Linux服务器中想要查看连接到服务器的所有IP地址只需要输入命令netstat -an就可以看到全部的资料。该命令的常见参数供您参考:-a (all)显示所有选项,默认不显示LISTEN相关;-t (tcp)仅显示tcp相关选项;-u (udp)仅显示udp相关选项;-n 拒绝显示别名,能显示数字的全部转化成数字;-l 仅列出有在 Listen (监听) 的服务状态;-p 显示建立相关链接的程...

weixin_31235909的博客 541

Ubuntu18.04 SoftRoCE安装教程

目标:创建两台Ubuntu18.04虚拟机,安装SoftRoCE环境,一台作为Server,一台作为Client,模拟RDMA通信环境,熟悉RDMA的通信方式。

GGGYL111的博客 1548

mysql uroot p 端口_MySQL常用操作

MySQL常用操作(1)更改mysql数据库root密码#给mysql的root用户设置密码mysqladmin-urootpassword'yourpassword'#登入到本地mysqlmysql-uroot-p(2)连接远程数据库#remote_host_ip:远程或者本地局域网的数据库服务器ip#-P:远程或者本地局域网的数据库服务器mysql的端口mysql-uroot-p...

weixin_42561623的博客 1075

如何在Jetson Nano上快速搭建Pytorch环境(含torchvision安装教程)

本文详细介绍了在Jetson Nano上快速搭建PyTorch环境的完整步骤,包括系统准备、PyTorch安装优化、torchvision编译安装及环境测试。通过本指南,开发者可以高效部署深度学习开发环境,充分利用Jetson Nano的GPU加速能力进行计算机视觉项目开发。

weixin_42628941的博客 340

RK3568平台(内存篇)DDR定频修改

如果需要DDR定频,则还需要注释掉其他多余的DDR频率,保留一个即可,例如注释掉opp-528000000、opp-1068000000、opp-1560000000,保留opp-2750000000则是定频最大频率。如果回退必须将 dmc_opp_table节点 的其他频率打开,否则系统无法选择到其他频率运行。ddr频点不对,先把ddr变频关掉,关闭后系统就不会一直重启了,以下是修改DDR频点的。rk3588修改定频节点在rk3588s.dtsi 的 dmc: dmc。

weixin_49303682的博客 1620

通过netstat网络工具命令查看MySQL3306端口是否启动监听

【代码】通过netstat网络工具命令查看MySQL3306端口是否启动监听。

不是巴菲特 747

Windows原生环境配置Tensorflow使用GPU

本文讲解如何在Windows原生环境搭建可调用GPU设备进行计算的Tensorflow2.x环境。 区别于WSL,使用Windows原始环境作为开发环境。

天然玩家的博客 1497

一、Mysql基础

mysql基础

Cookie__C的博客 566

手把手教你学Simulink——基于AI融合与智能调度的场实例:强化学习在卫星资源分配中的应用

本文详细介绍了如何利用Simulink和强化学习技术实现智能卫星资源分配。文章首先分析了低轨卫星通信系统面临的动态资源调度挑战,提出采用强化学习(特别是PPO算法)的解决方案。接着逐步展示了完整的建模过程:从Simulink项目创建、卫星通信环境建模(用户业务、信道特性、资源池),到强化学习任务定义(状态空间、动作空间、奖励函数),再到PPO智能体的构建与训练。最后通过仿真验证,PPO智能体在系统吞吐量、公平性和阻塞率等关键指标上均优于传统方法。该方案为卫星通信系统的智能资源管理提供了可行方案,并支持进一步

MHD0815的博客 190

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

【MySQL基础】MySQL基础操作(一)

数据库(Database)是按照数据结构来组织、存储和管理数据的仓库。每个数据库都有一个或多个不同的 API 用于创建,访问,管理,搜索和复制所保存的数据。我们也可以将数据存储在文件中,但是在文件中读写数据速度相对较慢。所以,现在我们使用关系型数据库管理系统(RDBMS)来存储和管理大数据量。所谓的关系型数据库,是建立在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据库中的数据。数据以表格的形式出现每行为各种记录名称每列为记录名称所对应的数据域。

daydayup 1799

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

【MySQL】基础一

MySQL基础一

qq_43000128的博客 1116

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

MySQL基础一

1、数据库概述 1.1数据库(DataBase) 数据库,顾名思义,就是遵循一定数据格式的数据集合,可以认为它是对文件系统的改进。它解决了不同操作系统之间,数据格式的兼容性问题。也就是说,只要是同一个数据库的数据文件,即使是从Windows迁移到了Linux上,也可以正常处理的。 1.2关系型和非关系型的区别 关系型数据库 查询来数据,得到对象,而非关系型数据库,保存键值对 查询处理数据,得到数组。 简单理解 而关系型数据库 对于java而言,一个类就可以对应一个表,一个类对象就可以对应表中一行数据,一

weixin_44400664的博客 436

mysql 基础(一)

数据库 定义: 数据库(Database)是按照数据结构来组织、存储和管理数据的仓库。 每个数据库都有一个或多个不同的 API 用于创建,访问,管理,搜索和复制所保存的数据。 我们也可以将数据存储在文件中,但是在文件中读写数据速度相对较慢。所以,现在我们使用关系型数据库管理系统(RDBMS)来存储和管理大数据量。所谓的关系型数据库,是建立在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据库中的数据。 RDBMS 即关系数据库管理系统(Relational Database Managemen

XxxxWwwwAaaa的博客 287

MySQL - 基础一

mysqldump -P3306 -u root -p 密码 -B 数据库名 > 数据库备份存储的文件路径示例:将mytest库备份到文件(退出连接)这时,可以打开看看 mytest.sql 文件里的内容,其实把我们整个创建数据库,建表,导入数据的语句都装载这个文件中;

ketil27的博客 837

mysql基础一

MySql基础一SQL语句分类mysql详细的数据类型DDL数据定义语言之数据库操作DDL数据定义语言之表操作DML数据操作语言DQL数据查询语言 SQL语句分类 数据定义语言:简称DDL(Data Definition Language),用来定义数据库对象:数据库,表,列等。关键字:create,alter,drop等。 数据操作语言:简称DML(Data Manipulation Lang...

walle2928的博客 202

一、MYSQL基础篇

一、前言 数据库服务器:整个MYSQL数据库软件,包括运行在它之上的所有数据库即为数据库服务器。MYSQL是一个单进程数据库,一个数据库服务器可以创建多个数据库,所有数据库运行在同一个进程中,数据库服务mysqld启动,则所有数据库都启动了。 数据库:一个数据库服务器可以创建多个数据库,表、触发器等对象都属于数据库,用户不属于数据库。由于MYSQL是单进程,一个数据库服务器上的多个数据库中的表可以很方便的关联。系统自带名称为mysql的数据库,保存所有数据库系统对象。 用户:与oracle不同,mys

lv_zj的专栏 1250
上一篇: leecode206_反转链表
Lin_flash
博客等级 码龄4年 29粉丝 3原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值