C++MySQL

数据

数据(Data)的定义:

  • 对客观事物的符号表示,如图形符号、数字、字母等,数据是数据库中存储的基本对象。在日常生活中,人们直接用语言来描述事物;在计算机中,为了存储和处理这些事物,就要将事物的特征抽象出来组成一个记录来描述。。

数据的种类

  • 文字、图形、图象、声音

数据的特点

  • 数据与其语义是不可分的

数据库

数据库的定义

  • 按照数据结构来组织、存储和管理数据的仓库”
    J.Martin给数据库下了一个比较完整的定义:数据库是存储在一起的相关数据的集合,这些数据是结构化的,无有害的或不必要的冗余,并为多种应用服务

数据库的优点

  1. 数据按一定的数据模型组织、描述和储存
  2. 可为各种用户共享
  3. 冗余度较小,节省存储空间
  4. 易扩展,编写有关数据库应用程序

数据库管理系统(底层以excel表格化存储) System)

  • 是一种操纵和管理数据库的大型软件,是用于建立、使用和维护数据库,简称DBMS。
    关系型数据库管理系统称为RDBMS,R指Relation

数据定义功能

  1. 提供数据定义语言(DDL)
  2. 定义数据库中的数据对象

数据操纵功能

  1. 提供数据操纵语言(DML)
  2. 操纵数据实现对数据库的基本操作
    (查询、插入、删除和修改)

DBMS的作用

  • 它对数据库进行统一的管理和控制,以保证数据库的安全性和完整性。

时下流行的DBMS

  1. Oracle
  • 应用广泛、功能强大,分布式数据库系统
  • “关系-对象”型数据库
  1. MySQL
  • 快捷、可靠
  • 开源、免费、与PHP组成经典的LAMP组合
  1. SQL Server
  • 针对不同用户群体的五个特殊的版本
  • 易用性好
  1. DB2
  • 应用于大型应用系统,具有较好的可伸缩性

什么是MySQL

  • MySQL是一个小型关系型数据库管理系统,开发者为瑞典MySQL AB公司。目前MySQL被广泛地应用在Internet上的中小型网站中。由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,许多中小型 网站为了降低网站总体拥有成本而选择了MySQL作为网站数据库。

mysql特征

  1. 性能快捷、优化SQL语言
  2. 容易使用
  3. 多线程和可靠性
  4. 多用户支持
  5. 可移植性和开放源代码
  6. 遵循国际标准和国际化支持
  7. 为多种编程语言提供API

mysql的不足

  1. 不能直接处理XML数据
  2. 一些功能上支持的不够完善和成熟
  3. 不能提供任何OLAP(实时分析系统)功能

mysql命令

mysql -u root -p8023

mysql -h host_name -u user_name –ppassword

  1. h:当连接MySQL服务器不在同台主机时,填写主机名或IP地址
  2. u:登录MySQL的用户名
  3. p:登录MySQL的密码
  • 注意:密码如果写在命令行的时候一定不能有空格。如果使用的系统为linux并且登陆用户名字与MySQL的用户名相同即可不用输入用户名密码,linux默认是以root登陆,windows默认用户是ODBC

mysql程序常用命令

  1. 显示所有数据库:show databases;
  2. 选定默认数据库:use dbname;
  3. 显示默认数据库中所有表:show tables;
  4. 退出mysql程序:\q

总结

  • MySQL是一种功能非常强大的关系型客户服务器数据库系统,它的安全性和稳定性足以满足许多应用程序的要求,而且有着非常高的性价比。

数据库常用知识

  1. 数据库由一批数据构成的有序集合,这些数据被分门别类地存放在一些结构化的数据表(table)里,而数据表之间又往往存在交叉引用的关系,这种关系使数据库又被称为关系型数据库
  2. 档案柜=数据库
  3. 抽屉=表
  4. 文件=记录

完整性分类

  1. 数据实体完整性
  2. 字段完整性
  3. 引用完整性
  4. 自定义完整性

SQL概述

什么是SQL

  • SQL是Structured Query Language(结构化查询语言)的缩写。SQL是专为数据库而建立的操作命令集,是一种功能齐全的数据库语言。在使用它时,只需要发出“做什么”的命令,“怎么做”是不用使用者考虑的。

SQL语法组成

  1. DML( Data Manipulation Language数据操作语言)
  • ——查询、插入、删除和修改数据库中的数据;
  • ——SELECT、INSERT、 UPDATE 、DELETE等;
  1. DCL( Data Control Language数据控制语言)
  • ——用来控制存取许可、存取权限等;
  • ——GRANT、REVOKE 等;
  1. DDL( Data Definition Language数据定义语言)
  • ——用来建立数据库、数据库对象和定义其列
  • ——CREATE TABLE 、DROP TABLE、ALTER TABLE 等
  1. 功能函数
  • ——日期函数、数学函数、字符函数、系统函数等

mysql中使用SQL语言几点说明

  1. 属于一个SQL语句,使用分号(;)结尾,否则mysql认为语句没有输入完。
  2. 箭头(->)代表SQL语句没有输入完
  3. 取消SQL语句使用(\c)
  4. SQL语句关键字和函数名不区分大小写(Linux区分,Windows不区分)
  5. 使用函数时,函数名和后面的括号之间不能有空格

字符串

  • 由单引号或者双引号括起来的字符或者数字。如:”abc”,‘abc10’
  • 字符串中要用转义字符才能表示的特殊符号
C++MySQL_第1张图片
Paste_Image.png

数值列类型

  • Mysql为除了NULL值外的所有通用数据类型提供了列类型。列类型是一种手段,通过这种手段可以描述表的列可以包含什么样类型的值。
  • 所有数值列类型的类型名及其说明和所占的字节数见下表:


    C++MySQL_第2张图片
    Paste_Image.png
    C++MySQL_第3张图片
    Paste_Image.png

数值列类型包括整型和浮点型

  • 说明:TINYINT, SAMLLINT, MEDIUMINT, INT, BIGINT每个数据类型的取值范围不同,故分别可以表示不同的数值范围。在定义整型列时,可以指定可选的显示尺寸M(见上表),M是从1到255的值,它表示显示列中值的字符数。

CHAR和VARCHAR类型

  1. CHAR类型和VARCHAR类型长度范围都是0~255之间的大小。他们之间的差别在于MySQL处理存储的方式:
  2. CHAR把这个大小视为值的准确大小(用空格填补比较短的值)。
  3. VARCHAR类型把它视为最大值并且只使用了存储字符串实际上需要的字节数(增加了一个额外的字节记录长度)。因而,较短的值当被插入一个语句为VARCHAR类型的字段时,将不会用空格填补(然而,较长的值仍然被截短 )。
  • 例如:INT(4) 意思是指定了一个具有4个字符显示宽度的INT列。如果定义了一个没有明确宽度的整数列,则会分配缺省的宽度,缺省值为每种类型的最长值的长度。
  • 对于每种浮点型,可指定一个最大的显示尺寸M和小数位数D,M的取值应该是0-30,但小于M-2。M和D对于DECIMAL是必须的。
    C++MySQL_第4张图片
    Paste_Image.png

时间和日期类型

  • 是存储如“2005 -1-1” 或者“12:00:00”这样的数值的值。在MySQL中日期是按”年-月-日”的顺序。
  • NULL值是一种无类型的值,表示“空,什么也没有”。
  • 所有时间和日期列类型的类型名及其说明和所占的字节数见下表:


    C++MySQL_第5张图片
    Paste_Image.png

    C++MySQL_第6张图片
    Paste_Image.png

    C++MySQL_第7张图片
    Paste_Image.png

说明

  1. 每个时间和日期列类型都有一个零值,当插入非法数值时就用零值来添加
  2. 表示日期时必须先按:年,月,日的顺序给出
  3. DATE ,TIME ,DATETIME分别是存储日期,时间与日期和时间的组合,其格式为“YYYY-MM-DD”,“hh:mm: ss”和“YYYY-MM-DD hh:mm: ss”,对于DATETIME类型,日期和时间部分都需要
  4. TIMESTAMP时间戳列类型以YYYYMMDDhhmmss的格式来表示值,其取值范围是19700101000000到2037年的某个时间,主要用于记录更改或创建某个记录

创建表

mysql -u root -p8023//进入mysql
create database test 01;//创建一个库
use test01;//进入库
show tables;//查看库里有几张表
create table data11(showtime time);//创建一个表,表的第一行为showtime,这一列的类型为time
insert into data11 values('11:11:11'),('11:11'),(111111);//插入数据,为3行.
select * from data11;//查看表格

C++MySQL_第8张图片
Paste_Image.png
create table data12(f_data date,f_time time);//创建表
insert into data12(f_data,f_time)values('1978-4-6',123412),(650503,'3:4:1');
select * from data12;

C++MySQL_第9张图片
Paste_Image.png
create table data14(f_datatime datetime,f_timestamp timestamp);
insert into data14 values('1999-11-11 11:11:11','2002-11-11 11:11:11');
select * from data14;

C++MySQL_第10张图片
Paste_Image.png
  1. 删除表
drop table data11;

drop table if exists data11;

删除表操作

  • 语法:
drop  table  [if exists]  tab_name [,tab_name]...

  • 叙述:从数据库中删除给定的表。如果给出if exists 子句,则删除不存在的表不会出错。

删除数据库操作

  • 语法:
drop  database [if exists] db_name

  • 叙述:删除给定的数据库。在删除一个数据库后,它就永远没有了,因此要特别小心。如果给出if exists 子句,则删除不存在的数据库不会出错。

数值列的完整性约束

unsigned用法

AUTO_INCREMENT

  • 自动标识列,在需要产生唯一标志符号或者顺序值时候,可用此属性。值一般从1开始,每行增加1,在插入NULL到一个AUTO_INCREMENT列时,MySQL会插入一个比该列中当前最大值大1 的值,一个表中最多能有一个有此属性的列。对于想使用此属性的列应该定义为NOT NULL,并定义为PRIMARY KEY 或者定义为UNIQUE键。
    举例:
    create table t(id int auto_increment not null primary key);

UNSIGNED

  • 无符号,此属性禁用负值,将数值的取值范围从零开始。
    举例:
    create table t(num tinyint , num2 tinyint unsigned);
create table t1(num1 int unsigned,num2 int);
insert into t1 values(-1,-2);
select * from t1;

Paste_Image.png
create table t2(num1 int not null,num2 int);
insert into t2(num2)values(10);
select * from t2;

Paste_Image.png
create table t3(num1 int default 100,num2 int);
insert into t3(num2)values(2);
select * from t3;

Paste_Image.png
create table t4(num2 int zerofill);
insert into t4 values(2);
select ....

Paste_Image.png
  • 唯一性
create table t5(num1 int unique,num2 int);
insert into t5 values(1,2);
insert into t5 values(1,2);//会报错
select * from t5;

Paste_Image.png
  • 自增
create table t6(num1 int auto_increment unique,num2 int);
insert into t6(num2)values(10);
select * from t6;
insert into t6(num2)values(10);
select * from t6;

Paste_Image.png

C++MySQL_第11张图片
Paste_Image.png

主键与外键

create table student(
    sid int not null auto_increment,
    name varchar(20) not null,
    primary key(sid)
);
create table score(
    cid int not null auto_increment primary key,
    score int,
    sid int,
    foreign key(sid) references student(sid)
);
//(1)insert into score(score,sid)values(100,1);//主键没有插入信息,则外键插入不成功.
insert into student(name)values('jxb');
select *from student;
insert into score(score,sid)values(100,1);
delete from student;
drop table student;

(1)insert into score(score,sid)values(100,1);

Paste_Image.png

(2)insert into student(name)values('jxb');

Paste_Image.png

(3)insert into score(score,sid)values(100,1)

Paste_Image.png

(4)delete from student;

Paste_Image.png

(5)drop table student;


Paste_Image.png
  • 兼容中文
create table t9(name char(20),id int);
insert into t9 values('蒋秀碧',2);
select * from t9;

Paste_Image.png
create table t10(name char(20),id int)default charset=utf8;
insert into t10 values('蒋秀碧',2);
select * from t9;

Paste_Image.png

更改表结构

desc t10;


Paste_Image.png
alter table t10 add adress int after name;
desc t10;

C++MySQL_第12张图片
Paste_Image.png

select * from t10;


Paste_Image.png
  • 修改adress的默认值
alter table t10 alter adress set default 100;
select * from t10;
desc t10;

  • select * from t10;
Paste_Image.png
  • desc t10;
C++MySQL_第13张图片
Paste_Image.png
  • 修改id
alter table t10 change id number char(20);
desc t10;

C++MySQL_第14张图片
Paste_Image.png
Paste_Image.png
  • 修改name
alter table t10 change name name int;
desc t10;

C++MySQL_第15张图片
Paste_Image.png
Paste_Image.png
  • 再将姓名的类型该回char(20)
alter table t10 modify name char(20);
desc t10;

  • desc t10;
C++MySQL_第16张图片
Paste_Image.png
  • 删除adress列
alter table t10 drop adress;
desc t10;

  • desc t10;
C++MySQL_第17张图片
Paste_Image.png
  • 将表名从t10重写命名为tt10
alter table t10 rename as tt10;
//desc t10;//报错
desc tt10;

  • desc tt10;
C++MySQL_第18张图片
Paste_Image.png

MySQL运算符

  • 算数运算符
  • 比较运算符
  • 逻辑运算符
  • 位运算符
C++MySQL_第19张图片
Paste_Image.png

比较运算符

C++MySQL_第20张图片
Paste_Image.png
  • select 'x'<>'X';//不区分大小写
Paste_Image.png
  • select binary 'x'<>'X';//区分大小写
Paste_Image.png
  • select 10 between 10 and 100;
Paste_Image.png
  • select 'x' between 'a' and 'z';
Paste_Image.png
  • select 7 in(1,2,3,4,5,6,7);
Paste_Image.png
  • select 7 in(1,2,3);
Paste_Image.png
  • select 2 = NULL,2 <=> NULL;
Paste_Image.png
  • select NULL = NULL,NULL <=> NULL;
Paste_Image.png
  • select 0 = NULL,0 <=>NULL;
Paste_Image.png

MySQL数据库中的通配符

  1. “%” (百分号) 代表任意长度(长度可以为0)的字符串
    举例:
  2. a%b表示以a开头,以b结尾的任意长度的字符串。如acb,addgb,ab 等都满足该匹配串
  3. “_ ”(下横线) 代表任意单个字符
    举例:
    a_b表示以a开头,以b结尾的长度为3的任意字符串。如acb,afb等都满足该匹配串

默认情况下

  • 默认情况下,比较是不区分大小写的方式执行的。然而,以前我们注意到,可以添加BINARY关键字让MySQL执行区分大小写的比较。
select 'mysql' like '%SQL';

Paste_Image.png

逻辑运算符

C++MySQL_第21张图片
Paste_Image.png

你可能感兴趣的:(C++MySQL)