xml地图|网站地图|网站标签 [设为首页] [加入收藏]
开发中的mysql,外键是什么
分类:数据库

MySQL基本简单操作

先进入Mysql容器。

[root@promote ~]# docker exec -it mysql /bin/bash
root@30d60b852cf5:/# mysql -uroot -p000000
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or g.
Your MySQL connection id is 8
Server version: 8.0.11 MySQL Community Server - GPL

Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or 'h' for help. Type 'c' to clear the current input statement.

mysql>

新建一个数据库。

mysql> create database gubeiqing;
Query OK, 1 row affected (0.02 sec)

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| gubeiqing          |
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0.01 sec)

进入数据库,新建数据表。

mysql> use gubeiqing;
Database changed
mysql> show tables;
Empty set (0.00 sec)

mysql> create table gubeiqing_table(name varchar(20) not null , age varchar(20) not null);
Query OK, 0 rows affected (0.11 sec)

mysql> show tables;
+---------------------+
| Tables_in_gubeiqing |
+---------------------+
| gubeiqing_table     |
+---------------------+
1 row in set (0.01 sec)

接着给数据库新增列,基本简单语法是:ALTER TABLE 表名 add column 列名 列类型 是否为空;

mysql> desc gubeiqing_table;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| name  | varchar(20) | NO   |     | NULL    |       |
| age   | varchar(20) | NO   |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
2 rows in set (0.01 sec)

mysql> alter table gubeiqing_table add column job varchar(20) not null;
Query OK, 0 rows affected (0.26 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> desc gubeiqing_table;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| name  | varchar(20) | NO   |     | NULL    |       |
| age   | varchar(20) | NO   |     | NULL    |       |
| job   | varchar(20) | NO   |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
3 rows in set (0.00 sec)

开发中的mysql,外键是什么。修改列名,基本简单语法是:ALTER TABLE 表名 change column 原列名 修改后的列名 列类型 是否为空;

mysql> desc gubeiqing_table;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| name  | varchar(20) | NO   |     | NULL    |       |
| age   | varchar(20) | NO   |     | NULL    |       |
| job   | varchar(20) | NO   |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
3 rows in set (0.00 sec)

mysql> alter table gubeiqing_table change column job gbq_job varchar(20) not null;
Query OK, 0 rows affected (0.11 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> desc gubeiqing_table;
+---------+-------------+------+-----+---------+-------+
| Field   | Type        | Null | Key | Default | Extra |
+---------+-------------+------+-----+---------+-------+
| name    | varchar(20) | NO   |     | NULL    |       |
| age     | varchar(20) | NO   |     | NULL    |       |
| gbq_job | varchar(20) | NO   |     | NULL    |       |
+---------+-------------+------+-----+---------+-------+
3 rows in set (0.00 sec)

删除刚刚新增的列,基本简单语法是:ALTER TABLE 表名 drop column 列名;

mysql> desc gubeiqing_table;
+---------+-------------+------+-----+---------+-------+
| Field   | Type        | Null | Key | Default | Extra |
+---------+-------------+------+-----+---------+-------+
| name    | varchar(20) | NO   |     | NULL    |       |
| age     | varchar(20) | NO   |     | NULL    |       |
| gbq_job | varchar(20) | NO   |     | NULL    |       |
+---------+-------------+------+-----+---------+-------+
3 rows in set (0.00 sec)

mysql> alter table gubeiqing_table drop column gbq_job;
Query OK, 0 rows affected (0.11 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> desc gubeiqing_table;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| name  | varchar(20) | NO   |     | NULL    |       |
| age   | varchar(20) | NO   |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
2 rows in set (0.00 sec)

然后说一下模糊搜索,就比如现在要在数据库里查找zhangsan的信息,可是只记得zhang剩下的部分都不记得了,那么就可以使用模糊搜索,基本简单语法是:SELECT * from 表名 WHERE 字段 LIKE '模糊字段';

mysql> select * from gubeiqing_table where name like 'zhang%';
+----------+-----+
| name     | age |
+----------+-----+
| zhangsan | 20  |
+----------+-----+
1 row in set (0.01 sec)

%用来表示不记得的部分,是通配符。
除了%之外还有 _表示任何单个字符,[ ]指定范围或集合中的任何单个字符,[^]不属于指定范围或集合的任何单个字符。

mysql大法

外键是什么?

MySQL 安装方式

1、rpm(yum)

2、源码包

3、通用二进制

 

企业中版本选择

5.6 5.7 选择 GA 6个月到1年之间的----------------------------------MySQL体系结构

实例:

mysqld在启动时,自动派生master thread ------>生成工作的线程(read write 资源管理 等线程)
预分配内存区域

如果有两张表:A,B。

mysqld三层结构

图片 1图片 2

1、DDL:数据库对象定义语言

1.1 库定义
    (1)建库?
      CREATE DATABASE db CHARSET utf8;

      规范: 
      库名小写。

      建库时加上CHARSET

      字符集:utf8  utf8mb4  

      校对规则:默认都是大小写不敏感的。

      lower_case_table_names=1     

    (2)删库?
        DROP  DATABASE db;
     (3)修改库
    ALTER DATABASE db CHARSET utf8mb4
-- 1.2 表定义
-- 1.2.1 创建表
USE db;
CREATE TABLE t1 (
id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT COMMENT '学生学号',
NAME VARCHAR(30) NOT NULL COMMENT '学生姓名',
gender ENUM ('m','f') NOT NULL DEFAULT 'm' COMMENT '学生性别',
birthday DATETIME NOT NULL DEFAULT NOW() COMMENT '入学时间'
) ENGINE INNODB CHARSET utf8;

-- 1.2.1 删除表
DROP TABLE t1;

-- 1.2.3 修改表

-- (1)先添加手机号,内容非空(最后一列)
ALTER TABLE t1 ADD telnum CHAR(11);

-- int -2^31 ~ 2^31-1
-- bigint -2^63 ~ 2^63-1

-- (2)指定添加年龄列到name列后面的位置,示例如下:
ALTER TABLE t1 ADD age TINYINT AFTER NAME;
DESC t1;

-- (3) 通过下面的命令在第一列添加sno字段。p200000001
ALTER TABLE t1 ADD sno CHAR(10) FIRST;

-- (4)若要删除字段,可采用如下命令。
ALTER TABLE t1 DROP sno;

-- (5)若要同时添加两个字段,可采用如下命令。
ALTER TABLE t1 ADD sage TINYINT FIRST,ADD qq VARCHAR(15);

-- (6)修改字段类型的命令如下:
ALTER TABLE t1 MODIFY NAME VARCHAR(20) ;

-- (7)修改字段名称的命令如下:
ALTER TABLE t1 CHANGE age oldboyage CHAR(4) ;


2、 DCL:

GRANT 
REVOKE


3、DML


INSERT INTO t1(id,NAME,age,...)



UPDATE t1 SET xx=xx WHERE 1=1


DELETE FROM t1 WHERE id=100

DLL、DCL、DCL

A表中有字段:c,d,e,f;  B表中有d,g,h,i。

连接层:

1、提供连接协议(TCP/IP socket)
2、验证的功能
3、提供一个专门的连接线程(接收用户发来的SQL,执行完成之后返回最终结果,但是没有能力“看懂”SQL,会将SQL语句丢给下一层)

那么,d字段就可以叫外键。对于A来说,d是A的字段;对于B来说,d是B的主键。

SQL层

1、接收上层发来语句
2、语法检查模块进行语法检查
3、语义的检查模块检查语义,分辨SQL语句的类型,将不同种类的语句交给不同的解析器。
4、解析器接收到SQL语句,进行解析操作,得到SQL的执行计划(explain)
5、优化器负责基于“成本”,找到消耗成本最低的执行计划。
6、执行器会基于优化器的选择,执行SQL语句,得到获取数据方法,交由下一层继续处理。
7、将二进制或者16进制数据,结构化成表
8、查询缓存:SQL语句的hash值+数据结果 ------>redis Tair(memcached)

存储引擎层

根据上层次获取数据的方法,把数据提取出来

权限管理

普通用户
系统用户
1、定义:
  用户名:密码,用于限制用户所能使用的功能,并为数据库加锁,避免外人访问
2、能做什么?
  1、登录系统
  2、管理系统对象

MySQL 逻辑结构

数据库对象

库 :用来存放表对象

建库-----> 进入库 ----> 表操作

表 : 原数据+数据行

二维表: 数据行+(列名字+列属性+多少行+占多大磁盘空间+权限)原数据

 企业申请数据库管理用户

用户名@'主机范围' 主机范围被称之为白名单

主机范围(开发提供给DBA的访问主机ip范围)
10.0.0.% -----》10.0.0.1-10.0.0.254
10.0.0.5% ----- 10.0.0.50-10.0.0.59
% XXXX no

grant all privileges on *.* to app@'10.0.0.%' identified by '123';

 

 开发人员申请用户流程:

 1、IP段

 2、用户名、密码要求

 3、需要哪些权限

开发申请用户时,提供给管理
app@'10.0.0.%' 密码: xxxx

权限: ALL privileges

SELECT, INSERT, UPDATE, DELETE, CREATE, RELOAD, 
SHUTDOWN, PROCESS, FILE, REFERENCES, INDEX, ALTER, 
SHOW DATABASES, SUPER, CREATE TEMPORARY TABLES, DROP
LOCK TABLES, EXECUTE, REPLICATION SLAVE, REPLICATION CLIENT,
CREATE VIEW, SHOW VIEW, CREATE ROUTINE,
ALTER ROUTINE, CREATE USER, EVENT, TRIGGER, CREATE TABLESPACE,trigger

开发人员可能会用到的权限

create update insert select CREATE VIEW CREATE ROUTINE SHOW VIEW 
CREATE TEMPORARY TABLES ALTER

grant 权限 on 权限作用范围 to 用户 identified by '密码'

grant create,update,insert,select ,CREATE VIEW on bbs.* to bbsuser@'192.168.12.%' identified by '123';#创建指定权限的用户

select user,host,password from mysql.user;

客户端工具中自带命令

图片 3图片 4

1、h 或 help 或 ?
2、G
3、source
  source world.sql
4、use
5、show
6、desc
7、create
8、truncate

........

自带命令

 varchar(30)和 char(30)区别

图片 5图片 6

1、都是可以存放30个字符长度的数据?
2、varchar会随着真实的存储数据长度分配存储空,需要花费额外资源(cpu、IO)
3、char类型,立即分配指定存储长度占用的磁盘空间。不需要花费额外资源(cpu、IO)。

到底怎么选择呢?
1、varchar 类型只有在insert 时需要花费额外资源,但是在针对可变长度存储时,更省空间。
2、char类型,在存储可变长度数据时,需要用空格填充剩余空间。
SHOW DATABASES;


业务: 产品的功能 + 用户的行为

异同

本文由澳门新葡亰手机版发布于数据库,转载请注明出处:开发中的mysql,外键是什么

上一篇:没有了 下一篇:没有了
猜你喜欢
热门排行
精彩图文