欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

MySQL的基础学习(一)——基础语句和约束

程序员文章站 2022-05-03 18:37:12
...

前言:

MySQL所使用的SQL语言是用于访问数据库的最常用的标准化语言,它是一个关系型数据库,这里,我来记录在终端对数据库的一些操作。

 

 

 


准备工作:

安装MySQL,并对路径配置环境变量

⇒这里有个我用的安装包,有需要就拿去MySQL

MySQL的基础学习(一)——基础语句和约束

~尽量不要学我安装到C盘~

然后在Path中添加 %MYSQL_HOME% 即可

在services中开启服务

MySQL的基础学习(一)——基础语句和约束

打开cmd窗口输入mysql

MySQL的基础学习(一)——基础语句和约束

如此显示,则配置成功


MySQL字符类型:

MySQL类型速查


基础学习:

登录数据库:

在终端输入如下命令即可登录本机数据库

mysql -uroot -p123

-u后面跟用户名(username)

-p后面跟密码(password)

退出数据库操作:

退出数据库的操作界面,回到cmd端

mysql > exit;
mysql > quit;
mysql > \q;

查询已有数据库:

查询数据库中已经存在的数据库

show databases;

注意:一定要有分号

+——————–+
| Database |
+——————–+
| blog |
| information_schema |
| myfirsttest |
| mysql |
| performance_schema |

选择数据库从而进行操作:

use 数据库名

Database changed

查看已有表:

选中数据库后,输入如下代码:

show tables;

+———————–+
| Tables_in_myfirsttest |
+———————–+
| user_name |
+———————–+

查看表内所有内容:

 select * from 表名;

+—-+———-+————–+———————+
| ID | ADMIN | PASSWORD | DATE |
+—-+———-+————–+———————+
| 1   | batman    |       1199       | 2019-11-05 19:30:38 |
| 2   | superman  |     2200     | 2019-11-05 19:30:38 

有条件的查看:

select * from user_name where ID=1;

+—-+——–+———-+———————+
| ID | ADMIN | PASSWORD | DATE |
+—-+——–+———-+———————+
| 1 | batman | 1199 | 2019-11-05 19:30:38 |

数据库服务器中创建数据库:

在登录数据库后,输入如下命令来创建数据库

create database 数据库名;

创建数据表:

大致格式如下:

CREATE TABLE pet (
           name VARCHAR(20),
           sex CHAR(1),
           birth DATE);

剖析一下,就是这样:

CREATE TABLE 表名(
           字段1 字段1类型,
           字段2 字段2类型,
           字段3 字段3类型);

MySQL数据类型速查

查看数据表的具体结构:

输入如下命令:

describe 表名

+——-+————-+——+—–+———+——-+
| Field |      Type        | Null | Key | Default | Extra |
+——-+————-+——+—–+———+——-+
| name | varchar(20)| YES |         | NULL |             |
| sex     |    char(1)      | YES |         | NULL |             |
| birth  |       date        | YES |         | NULL |             |
+——-+————-+——+—–+———+——-+

给数据表插入信息:

大致格式如下:

INSERT INTO pet
VALUES ('dudu','f','1999-03-30');

剖析一下就是这样:

INSERT INTO 表名
VALUES ('对应类型的对应信息','对应类型的对应信息','对应类型的对应信息');

+——+——-+——+
| name | sex    | birth |
+——+——-+——+
| dudu | f       | 1999-03-30 |
+——+——-+——+

删除表:

删除数据表

DROP TABLE 表名

 

给数据表删除信息:

删除某一条:

delete from 表名 where 条件;

例如此表:

+—-+———-+——+——+
| id |   name   | age | info |
+—-+———-+——+——+
| 2 | 变体精灵 | 11  | 牛逼 |
| 6 |    熊猫人  | 34 | 凶恶 |
| 7 | 恶魔猎手 | 21  | 敏捷 |
+—-+———-+——+——+

使用命令:

delete from hero where name='熊猫人';

之后即:

+—-+———-+——+——+
| id | name | age | info |
+—-+———-+——+——+
| 2 | 变体精灵 | 11 | 牛逼 |
| 7 | 恶魔猎手 | 21 | 敏捷 |
+—-+———-+——+——+

给数据表修改信息:

修改某一信息:

update 表名 set 字段=新值 where 字段=旧值;

旧值和新值并不在同一位置,旧值只是为了方便索引到某一行

例如:

+—-+———-+——+——+
| id | name | age | info |
+—-+———-+——+——+
| 2 | 变体精灵 | 11 | 牛逼 |
| 7 | 恶魔猎手 | 21 | 敏捷 |
+—-+———-+——+——+

update hero set name="水人" where info='牛逼';

之后:

+—-+———-+——+——+
| id | name | age | info |
+—-+———-+——+——+
| 2 | 水人 | 11 | 牛逼 |
| 7 | 恶魔猎手 | 21 | 敏捷 |
+—-+———-+——+——+

 


约束:

概念:

MySQL创建数据表的时候,对字段进行的一些约束条件

主要有:

  • 主键约束: primary_key
  • 自增约束: auto_increment
  • 外键约束: foreign references
  • 唯一约束: unique
  • 非空约束: not_null
  • 默认约束: default

通常是在创建数据表的时候给字段进行约束:

CREATE TABLE 表名( 
         字段1 字段1类型 约束关键字, 
         字段2 字段2类型 约束关键字, 
         字段3 字段3类型 
);

 

主键约束(primary_key):

给字段添加主键约束,将会使得该字段不重复,不为空,让记录唯一

create table admin(
       id int primary key,
       name varchar(20) 
);

然后输入命令:describe admin;

可以看到:

+——-+————-+——+—–+———+——-+
| Field  |     Type        | Null | Key | Default | Extra |
+——-+————-+——+—–+———+——-+
|    id     |     int(11)     |  NO  | PRI | NULL  |            |
| name |varchar(20)|  YES |         | NULL  |            |
+——-+————-+——+—–+———+——-+

这时我们就不能添加两个ID相同的数据了,也不能建数据设置ID为NULL。

联合主键:

create table user2(
       id int,
       name varchar(20),
       password varchar(20),
       primary key(id,name)
);

 如此一来,要求 id+name 的值不能重复,而id或name都不能为NULL。
例如表中有数据 1——小王——12345,
则不能再加入 1——小王——23456,
但可以加入 1——小张——98765 或者 2——小王——34534。(联合主键主要应用于多对多的关系结构上)

自增约束(auto_increment):

自增约束常常与主键约束一起使用。

创建一个字段id具有主键约束自增约束的表

create table admin(
       id int primary key auto_increment,
       name varchar(20) 
);

使用命令describe admin;查看字段属性

+——-+————-+——+—–+———+—————-+
|  Field  |       Type     | Null | Key | Default |       Extra         |
+——-+————-+——+—–+———+—————-+
|     id    |      int(11)    |   NO | PRI |  NULL  | auto_increment |
| name | varchar(20)| YES |         |  NULL  |                          |
+——-+————-+——+—–+———+—————-+

接下来指定字段插入两条数据:

insert into admin (name) value('张雪');
insert into admin (name) value('李获');

然后select * from admin;

+—-+——+
|  id  | name |
+—-+——+
|   1   |  张雪 |
|    2  | 李获 |
+—-+——+

修改字段的约束:

alter:更改,修改

增加约束——add:

 alter table 表名 add primary key(字段);

例如:

 alter table admin add primary key(id);

即给id增加了主键约束

删除约束——drop:

而要删除主键约束:

alter table 表名 drop primary key;

例如:

alter table admin drop primary key;

修改约束——modify:

modify可以重置字段属性

修改主键约束(通过修改字段属性):

alter table 表名 modify 字段 字段类型 约束;

例如:

alter table admin modify id int primary key;

唯一约束(unique):

约束字段的值不可以重复。

create table admin(
             id int,
             name varchar(20) unique
);

或者

create table admin(
             id int,
             name varchar(20),
             unique(name)
);

使用命令desc admin;(这里的describe简写了,也是可以正常运行的)

+——-+————-+——+—–+———+——-+
|  Field |      Type      | Null  | Key | Default | Extra |
+——-+————-+——+—–+———+——-+
|   id      |    int(11)     | YES  |         | NULL   |            |
| name | varchar(20) | YES | UNI | NULL |           |
+——-+————-+——+—–+———+——-+

若要删除唯一约束:

 alter table admin drop index name;

如果不加index会把整个name字段删除

当使用联合命令赋予unique:

create table admin(
       id int,
       name varchar(20),
       unique(id,name)
);

然后describe会变成这样:

+——-+————-+——+—–+———+——-+
|  Field  |    Type        | Null | Key | Default | Extra |
+——-+————-+——+—–+———+——-+
|     id    |    int(11)      | YES | MUL | NULL |            |
|  name | varchar(20)|YES|           | NULL |             |
+——-+————-+——+—–+———+——-+

类似于联合主键,id+unique 不重复即可

非空约束(not_null):

create table admin(
           id int,
           name varchar(20) not null
);

使用describe:

+——-+————-+——+—–+———+——-+
|  Field  |      Type     |  Null | Key | Default | Extra |
+——-+————-+——+—–+———+——-+
|      id   |      int(11)    | YES |         | NULL   |            |
| name | varchar(20)| NO |          | NULL   |            |
+——-+————-+——+—–+———+——-+

默认约束(default) :

在插入字段值的时候,若没有传入具体值,就会传入默认值

create table admin(
          id int,
          name varchar(20),
          age int default 10
);

使用desc查看:

+——-+————-+——+—–+———+——-+
| Field  |       Type      | Null | Key | Default | Extra |
+——-+————-+——+—–+———+——-+
|    id     |      int(11)    |  YES |        |  NULL  |            |
| name | varchar(20)| YES |        |  NULL  |            |
|    age  |     int(11)     |  YES |         |     10      |           |
+——-+————-+——+—–+———+——-+

之后我们插入元素的话,若没有给age赋值,则age使用10;

外键约束(foreign references):

外键约束是涉及两个表的约束——主表(父表)、副表(子表)

主表中的数据被副表所引用,所以在添加和删除数据时有了限制

例如,创建表 world

 create table world(
         id int primary key,
         name  varchar(20) unique
);

再创建表hero

create table hero(
         id int primary key,
         name varchar(20),
         address varchar(20),
         foreign key(address) references world(name)
);

foreign key(address) references world(name)这一句即实现了将表内的address字段与外表world的name字段关联,这样一来,hero则为副表,world则为主表,hero的增删中的信息的address值必须在world的name值中有所对应。

注意,创建主表的时候,关联字段必须要有唯一性,如world中的name有unique约束

接下来我们继续,给world里添加了一些信息:

+—-+——–+
|  id   | name |
+—-+——–+
|   1   |  中国   |
|   3   | 俄罗斯|
|   2   |   美国  |
+—-+——–+

然后我们给hero添加信息:

//可以顺利添加
insert into hero values(1,"孙悟空","中国");
//不能顺利添加
insert into hero values(2,"苏菲玛索","法国");

这就是因为有外键约束,在world中没有”法国”

另一方面:

此时在子表中有 1——孙悟空——中国 的信息,我们如果使用如下命令删除world中的 1——中国

delete from world where id=1;

就会报错,因为 1——中国 还在作为关联中


第一部分就先写到这里了,把你的想法留言到下面吧

 

 

 

希望对你有帮助

欢迎访问我的博客:is-hash.com

商业转载 请联系作者获得授权,非商业转载 请标明出处,谢谢

相关标签: mysql