与MySQL零距离接触—数据类型与操作数据表

慕课网视频笔记

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

数据类型:

  • 整型
  • 浮点型
  • 日期类型
  • 字符型

整型:

  • TINYINT
  • SMALLINT
  • MEDIUMINT
  • INT
  • BIGINT

浮点型:

  • float
  • double

日期时间型:

  • YEAR
  • TIME
  • DATE
  • DATETIME
  • TIMESTAMP(时间戳 )

字符型:

  • CHAR(定长型)
  • VARCHAR(变长型)
  • TINYTEXT
  • TEXT
  • MENDIUMTEXT
  • LONGTEXT
  • ENUM(’value1’,’value2’,…)(枚举值)
  • SET(‘value1’,’value2’,…)(集合)

操作数据表:

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

#打开数据库
USE 数据库名称;   #打开数据库,数据库必须事前存在

mysql -uroot -p  #登录mysql
use test;        #打开数据库
show tables;     #展示数据库里面的所有表

#显示当前打开的是哪个数据库
SELECT DATABASE();    
select database();

#创建数据表
CREATE TABLE [IF NOT EXISTS] table_name(
    column_name data_type,
    ...
)

create table demo01(
    name varchar(20),
    age  tinyint(10) unsigned,
    grade tinyint(10)
);

注:unsigned表示无符号的意思,也就是非负数,只用于整型。

#查看数据表
SHOW TABLES [FROM db_name] [LIKE 'pattern' | WHERE expr]
show tables;

#查看数据表结构(两种方法)
SHOW COLUMNS FROM tbl_name
DESC tbl_name;
show columns from test1;
desc test1;

#记录的插入与查找
INSERT [INTO] tbl_name [(col_name,...)] VALUES (val,...)
insert demo01 values("a",18,88);
insert test1 values(4,"yangyang",23);

假如表test1 id自动标号,我们就可以这样插入数据:insert test1(namea,age) values("yangyang",23);
#其中(name,age)不能省略。
insert demo01 (name,age) values("b",19)

#记录查找
SELECT expr,... FROM tbl_name
select name from demo01;

#MySQL空值与非空
NULL     字段值可以为空
NOT NULL 字段值禁止为空
create table tb2(
    username varchar(20) not null,
    age int(10) null,    
) 

MySQL自动编号 AUTO_INCREMENT,自动编号,且必须与主键组合使用 ,默认情况下,起始值为1,每次增量为1。

#MySQL主键约束 PRIMARY KEY
主键约束
每张数据表只能存在一个主键
 键保证记录的唯一性
主键自动为NOT NULL
主键的赋值不能相同(比如name为主键,不能出现两个重名的人,1赋值Tom,2也赋值TOM)
AUTO_INCREMENT一定要与主键联合使用,但是定义的主键不一定要使用AUTO_INCREMENT。

create table tb3(
    id SMALLINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    username VARCHAR(30) NOT NULL
);

#AUTO_INCREMENT要和PRIMARY KEY一起使用。且PRIMARY KEY自动设置为NOT NULL。
对于设置自动增加的数据,我们可以这样插入数据:insert test1(namea,age) values("yangyang",23);
#其中(name,age)不能省略。
#UNIQUE KEY 唯一约束
唯一约束
唯一约束可以保证记录的唯一性
唯一约束的字段可以为空值(NULL)
每张数据表可以存在多个唯一约束

注:unique key可以为空,但是一旦为空则整条记录为空(所以就别费工夫给unique key为空的行插入别的值了)。也就是说你插入了再多的null,也只有一个null,所以不会重复。
注:這個没表述清楚、主键約束只有一個,唯一約束可以有多個,針對的是整個表的結構,意思是,每個表只能有一個主键約束;每個表中可以有多個唯一約束,比如每個人,眼睛,鼻子,嘴巴都不一樣,都可以作為唯一約束;另外又說都只能有一個,是針對表裡面的數據,每個數據只能有一個,比如已經有一個大眼睛了,再插入一條大眼睛的數據就不行了、這個也是唯一約束的作用。【比如username 添加 UNIQUE之后 ,在添加记录时  记录1 username为Tom, 记录2 username也为Tom 这样是不允许的。】

#主键约束和唯一约束 的一张表
create table tb4(
    id SMALLINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    username VARCHAR(20) NOT NULL UNIQUE KEY,
    agr TINYINT UNSIGNED
);    

主键约束可以理解为你可以通过主键来查询一条唯一的记录,因为主键是唯一的。
唯一约束规定的是你定义的字段不能出现重复,比如username添加UNIQUE之后,在添加记录时 记录1 username为Tom,记录2 username也为Tom这样是不允许的。

#DEFAULT 默认约束
默认值
当插入记录时,如果没有明确为字段赋值,则自动赋予默认值。
sex ENUM('1','2','3') DEFAULT '3'

create table tb5(
    sex ENUM("1","2","3") DEFAULT "3"   #sex设置为1(男)2(女)3(保密),3保密是默认状态
);
insert tb5(username) values("TOM");

关于为含有DEFAULT|ENUM的表插入数据:

这里写图片描述

尝试之后发现两个问题:

1.id虽然设置自增,但是我插入数据时候可以随意写入(我的id顺序是1,3,5,7这种也没报错)。

2.对于sex我尝试插入4这个值,没有报错,只有warning,但是查看表sex里面没有值,也就是说sex插入的值,必须是ENUM里面选。

总结:

这里写图片描述

MySQL基础:

cls清屏CMD窗口

SQL语句中的注释comment:

create table test1 ( 
    field_name int comment '字段的注释' 
)comment='表的注释'; 

其实desc users2与SHOW COLUMNS FROM users2是一样的,都是查表结构。

MySQL目录结构:

  • MySQL目录结构
  • bin目录,存储可执行文件
  • data目录,存储数据文件
  • docs,文档
  • include目录,存储包含的头文件
  • lib目录,数据库文件
  • share,错误消息和字符集文件

MySQL的配置选项(my.ini文件中,client是客户端,mysqld是服务器端):

  • 修改编码方式(注意是utf8)
    [client]
    default-character-set = utf8
    [mysqld]
    character-set-server = utf8

启动与停止MySQL服务:

  • 启动MySQL服务 net start mysql
  • 停止MySQL服务 net stop mysql

MySQL启动中出现的问题

1.执行net start mysql,提示“服务名无效”。

因为net start +服务名,启动的是win下注册的服务。此时,我系统中并没有注册mysql到服务中。我们可以去设备管理器查看本机服务。

那么怎么将MySQL注册到windows服务里面呢?

  • 以管理员的身份运行cmd窗口,到MySQL安装目录的bin目录下
  • 在命令行窗口输入mysqld –install,回车就可以了

2.执行net start mysql ,提示系统错误5,拒绝访问。

  • 以管理员的身份运行cmd窗口,再执行net start mysql 就可以了。

MySQL登录:

mysql 参数
    -D,--datebase=name    打开指定数据库
    --delimiter = name    指定分隔符
    -h, --host=name       服务器名称
    -p,--password[=name]  密码
    -P,--port=#           端口号
    --prompt=name         设置提示符
    -u,--user=name        用户名
    -V,--version          输出版本信息并且退出

//root用户登陆
mysql -uroot -p
mysql -uroot -p -P3306 -h127.0.0.1

MySQL退出:

  • exit
  • quit
  • \q

修改MySQL提示符(两种方法):

  • 1.连接客户端时通过参数指定
    mysql -uroot -proot –prompt 提示符(u是用户名,p是密码)
    mysql -uroot -proot -prompt \h
  • 2.连接上客户端后,通过prompt命令修改
    prompt 提示符

mysql可以跟的提示符:

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

例如:

mysql -uroot -proot --prompt \h
localhost

MySQL常用命令以及语法规范:

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

代码示例:

mysql -uroot -p     #登录
USE test
SELECT   VERSION(); #显示当前服务器版本
SELECT   NOW();     #显示当前日期时间

MySQL语句的规范:

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

操作数据库:

{ }表示一定要有,|表示做选择,[ ]表示可选。

#创建数据库
CREATE {DATABASE | SCHEMA} [IF NOT EXISTS] db_name [DEFAULT] CHARACTER SET [=] charset_name
#如果数据库已经存在,再使用上面IF NOT EXISTS这句语句,会忽略错误,没有这句话会报错

create database t1;
create database t1 character set utf8;

#查看当前服务器下的数据库列表
SHOW {DATABASES | SCHEMAS} [LIKE 'pattern' | WHERE expr]

show databases;

#查看创建的数据库(t1)的编码方式
SHOW CREATE DATABASE t1;

show create database demo;   

#数据库修改
ALTER {DATABASE | SCHEMA} [db_name] [DAFAULT] CHARACTER SET [=] charset_name

alter database t3 character set gbk;
show create database t3;

#删除数据库
DROP {DATABASE | SCHEMA} [IF EXISTS] db_name

drop database t1;

#查看警告信息
SHOW WARNINGS;

show warnings;

基本操作代码示例:

//登陆mysql
mysql -uroot -p;
//查看所有数据库
show databases;
//进入指定数据库
use 数据库名称;
//查看数据库里面的所有的表
show tables;

猜你喜欢

转载自blog.csdn.net/u014465934/article/details/80677705