您的位置:首页 > 数据库 > MySQL

mysql 学习笔记

2015-08-07 15:03 323 查看
RDBMS(Relational Database Management System:关系数据库管理系统)

1.数据以表格的形式出现

2.每行为各种记录名称

3 每列为各种记录名称的对应的数据域

4 多行和列构成table

5 若干表单组成database

database操作:

create database database_name;#创建数据库database_name

#database_name 可以由字母、数字、下划线、@#$组成,首字母不能是数字和$

show databases;
#显示所有的库

drop database database_name;
#删除database_name

use database_name;#使用数据库database_name

table操作:

create:

create table table_name(

column_name1 type1,

column_name2 type2,

.....

column_nameN typeN

);#创建表

约束:

#not null 该列不能存储null值,即值不能为空

create table table_name(

column_name1 type1 NOT NULL,

column_name2 type2,

.....

column_nameN typeN

);

#unique 保证某列的值都是不同的

create table table_name(

column_name1 type1 NOT NULL UNIQUE,

column_name2 type2,

.....

column_nameN typeN,

CONSTRAINT unique_name UNIQUE (column_names)
#为UNIQUE约束命名

);

alter table table_name add/drop UNIQUE/(CONSTREANT unique_name UNIQUE) (column_names);#为已存在的表添加unique约束

#primary key 主键结合了not null和unique,确保某列或多列有唯一的标识,一张表中只能有一个primary key

create table table_name(

column_name1 type1 PRIMARY KEY,

column_name2 type2,

.....

column_nameN typeN

);

create table table_name(

column_name1 type1 PRIMARY KEY,

column_name2 type2,

.....

column_nameN typeN

PRIMARY KEY (column_name) /CONSTRANT primary_name PRIMARY KEY (column_name)

);

alter table table_name add/drop PRIMARY KEY/(CONSTRAINT primary_name PRIMARY KEY) (column_names);
#default 默认值

create table table_name(

column_name1 type1 DEFAULT value, #设置默认值

column_name2 type2,

.....

column_nameN typeN

);

#foreign key 保证两张表(如子表和父表)之间的参照完整性

create table table_name(

column_name1 type1,

column_name2 type2,

.....

column_nameN typeN

CONSTRAINT foreign_name FOREIGN KEY (column_name) REFERENCES foreign_table (foreign_column);

);#同样可用alter table添加外键

#auto increment 列值自动增长,由于列值自动增长会生成唯一的ID,因此常和主键一同被设置

#check 保证某列的值符合指定的条件 mysql不支持check

drop table table_name;#删除表

describe/desc table_name;#查看表每一列的属性

select:

select column_name,column_name from table_name;#选择column_name对应的数据

select * from table_name;#选择所有列

order by:

select * from table_name order by column_name asc|desc;

#order by 根据column_name列对所选数据进行排序,默认是asc升序,可以使用desc进行降序

select * from table_name limit value;#选择value个数据

where:

where operator:

select column_name from table_name where column_name [operator] value; #where语句在列数据中选择符合column_name [operator] value条件的数据

where condition1 and/or condition2 #使用AND和OR添加多个条件

运算符描述
=等于
<>不等于。注释:在 SQL 的一些版本中,该操作符可被写成 !=
>大于
<小于
>=大于等于
<=小于等于
BETWEEN在某个范围内
LIKE搜索某种模式
IN指定针对某个列的多个可能值
where like/not like:

select column_names from table_name where column_name like pattern; #选择列值和pattern匹配的数据

#pattern取值:

‘XX%’ 以XX开头 SELECT * FROM Customers WHERE City LIKE 'ber%';

‘%XX’ 以XX为结尾

‘%XX%’ 包换XX SELECT * FROM CustomersWHERE City LIKE '%es%';

select column_names from table_name where column_name not like pattern; #使用not like选择不匹配的记录

通配符:

http://www.runoob.com/sql/sql-wildcards.html 菜鸟教程



% 替代0个或多个字符

_下划线 替代一个字符

SELECT * FROM Customers WHERE City LIKE '_erlin';

SELECT * FROM Customers WHERE City LIKE
'L_n_on';

[charlist] 字符列中的任何单一字符 [char1-char2] 在之间的任何单一字符

SELECT * FROM Customers WHERE City LIKE '[bsp]%';

SELECT * FROM Customers WHERE City LIKE
'[a-c]%';

[^charlist] or [!charlist] 不在字符列中的任何单一字符

SELECT * FROM Customers WHERE City LIKE '[!bsp]%';

where in:

select column_names from where column_name in (value1,value2); #column_name是value之一

where column_name not in; #column_name不是value之一

where between:

select column_names from table_name where column_name between value1 and value2;#选择column_name的值在value1和value2之间的

where column_name not between;#不在value1和value2之间

join:

select column_names from table_name1 inner join table_name2 on condition;#从两个表中选择满足conditon的记录

#left join :没有匹配项的时候返回左表的所有行

#right join: 没有匹配项的时候返回右表的所有行

#full join:只要两个表中存在一个匹配,则返回行

[b]union:[/b]

select column_names from table_name1

union

select column_names from table_name2; #组合两张表中的若干列记录,组合后的column_name为第一张表

#如果两张表中有相同的行,使用union只返回一行,使用union all则返回所有行

select column_names from table_name1

where conditon1

union

select column_names from table_name2 where condition2;

#在两张表的table_name后使用where分别关联条件

select column_names from table_name1

union

select column_names from table_name2;

order by column_name; #排序
select into:

select * into new_table from table_name;#从table_name中复制数据到new_table中

#mysql不支持select into,可以使用下面的语句代替:

#new_table未创建的情况下:

create table new_table select column_names from table_name;

例如:

create table newtable1

select class.teacher_name,student.name,student.id from class inner join student where class.id=student.class_id;

#如果new_table已存在,使用insert into 代替create table

insert into newtable

select class.teacher_name,student.name,student.id

from class inner join student where class.id=student.class_id;

insert into:

insert into table_name (column1,column2,....,columnN) values #对应列名插入数据,column可以有若干个,也可以不写

(value11,value12,....,value1N),#第一行数据

(value21,value22,.....value2N);#第二行数据

#对没有给出value的列,将使用默认值

update set:

update table_name set column1=value1,column2=value2,.... where some_column=some_value;

#将符合where条件的行,对应的列(column1,column2)数据修改为value1,value2

#如果不使用where指定行,所有行的数据

delete from:

delete from table_name where some_column=some_value; #删除列值符合条件的一行

delete from table; / delete * from table;
#删除table中的所有数据

create index:

#索引由表中一个或多个字段(column)生成的键组成,存储在B树或者哈希表中,可以加快查询数据的速度。

#同时,如果列具有索引那么在插入数据时需要更新其数据结构,将花费更多的时间

#用户无法看到索引

create table table_name(

column_name1 type1,

column_name2 type2,

.....

column_nameN typeN,

INDEX|KEY index_name (column_names)

);#创建表时添加索引

alter table table_name add INDEX|KEY index_name (column_names); #向现有表中添加索引

alter table table_name drop INDEX index_name;#删除索引

#UNIQUE INDEX 唯一索引,其索引的值不能重复

#FULLTEXT INDEX 全文索引,仅支持MyISAM存储引擎,常用语CHAR VARCHAR TEXT类型的字段上

alter table :

#向已存在的表中添加、修改、删除列

ALTER TABLE table_name ADD column_name datatype; #添加列

ALTER TABLE table_name ADD column_name datatype FIRST #使用FIRST将新列放在最前面

ALTER TABLE table_name ADD column_name datatype AFTER column_name; #将新列放到column_name1之后

ALTER TABLE table_name DROP column_name;
#删除列

ALTER TABLE table_name MODIFY column_name datatype; #修改列的数据类型

ALTER TABLE table_name CHANGE old_column new_column datatype; #修改列名,并可以同时修改数据类型

NULL:

#null不能使用=之类运算符,使用IS NULL or IS NOT NULL

SELECT ProductName,UnitPrice*(UnitsInStock+UnitsOnOrder)

FROM Products

#对于这个例子,如果UnitsOnOrder是NULL,那么结果是NULL

#使用IFNULL(UnitsOnOrder,0) 或者 COALESCE(UnitsOnOrder,0) 当UnitsOnOrder是NULL的时候,返回0

数据类型:

CHAR(n) 固定长度为n的字符串

VARCHAR(n) 可变长度的字符串,最大为n

TINYTEXT 0~255字节 TEXT 0~65535字节 MEDIUM 0~167772150字节 LONGTEXT 0~4294967285字节

BINARY(n) 二进制串

VARBINARY(n) 可变长度二进制串

TINYINT 1字节 SMALLINT 2 MEDIUMINT 3 INT 4 BIGINT 8

BIT(M) M位二进制

FLOAT 4字节,精度9

DOUBLE 8字节,精度16

DEC(M,D)/DECIMAL(M,D) M位有效数字,精确到小数点后D位,使用字符串实现

DATE YYYY-MM-DD

DATETIME YYYY-MM-DD HH:MM:SS

TIMESTAMP YYYYMMDDHHMMSS;

TIME HH:MM:SS

YEAR YYYY

c++连接mysql(vs2013):

参考:
http://www.2cto.com/database/201411/354316.html 这篇文章介绍了整个流程
http://www.cnblogs.com/justinzhang/archive/2011/09/23/2185963.html 介绍了基本的API用法

按照上面两篇文章所说,配置了一下,结果遇到了一个问题

错误 3error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 inte:\code\projects\mysql\test\mysql_com.h320

错误 2error C2146: 语法错误: 缺少“;”(在标识符“fd”的前面)e:\code\projects\mysql\test\mysql_com.h320

错误原因就是mysql_com.h中第320行的:

//my_socket fd;/* For Perl DBI/dbd */

网上搜了一下没找着原因,看到右面的注释,臆测跟我c++条用mysql的api没有毛线关系,然后就把这句注释掉了。。。结果可以了。。。标记一下,以后再来找原因

配置如下:

mysql.h所在目录C:\Program Files\MySQL\MySQL Server 5.6\include



libmysql.lib所在目录C:\Program Files\MySQL\MySQL Server 5.6\lib





添加mysql.h windows.h头文件
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: