命令
- mysql -u root -p密码 //进入mysql
注意:密码如果写在命令行的时候一定不能有空格。如果使用的系统为linux并且登陆用户名字与MySQL的用户名相同即可不用输入用户名密码,linux默认是以root登陆,windows默认用户是ODBC
读书籍的表格 - show databases; //显示所有的数据
- use mysql; //使用mysql
- show tables; //显示所有的表格
- show * from user; //打开user表格,查看表格里的内容
- \q //退出
创建一个数据,表格,并在表格中插入一列showtime
mysql> create database test01; //创建一个数据test01
Query OK, 1 row affected (0.07 sec)
mysql> use test01; //使用test01
Database changed
mysql> show tables; //显示里面的表格
Empty set (0.01 sec)
mysql> create table data11(showtime time);//创建表格data11,列名为showtime
Query OK, 0 rows affected (0.34 sec)
mysql> insert into data11 values('11:11:11'),('11:11'),(111111);//在data11表格里填数据
Query OK, 3 rows affected (0.06 sec)
Records: 3 Duplicates: 0 Warnings: 0
mysql> select * from data11;//显示表格data11
+----------+
| showtime |
+----------+
| 11:11:11 |
| 11:11:00 |
| 11:11:11 |
+----------+
3 rows in set (0.04 sec)
mysql>
运行结果:
插入数据(两种方式)
主键与外键
数据表之间的关联/引用关系是依靠具体的主键(primary key)和外键(foreign key)建立起来的。
主键:帮助MySQL以最快的速度把一条特点的数据记录的位置确定下来。
主键必须是唯一的
主键应该是紧凑的,因此整数类型比较适合
外键:引用另外一个数据表的某条记录。
外键列类型尽可能与主键列类型保持一致
外键列应该加上NOT NULL
- 主键(唯一的)
create table student(
sid int not null auto_increment,//自动增加sid不能为空
name varchar(20) not null,
primary key(sid)//主键
);
- 外键(自动检查外键是否匹配,仅适用InnoDB)
create table score(
cid int not null auto_increment primary key,
score int,
sid int,
foreign key(sid) references student(sid)//外键
);
内连接:
- create table students(sname char(20),sno int);//创建学生表
- create table sc(studentsid int,courseid int,grade int);//创建sc表
- insert into students values('mcf',1),('fdd',2),('ikv',3),('hjjd',4);//在学生表中插入数据
- insert into sc values(1,1,97),(2,1,66),(2,2,57),(3,5,64),(4,6,33);//在sc表中插入数据
- select * from sc;//显示sc表中的内容
- select * from students;//显示学生表中的内容
- select students.sname,sc.courseid,sc.grade from students inner join sc on students.sno =sc.studentsid;//内连
外连接
- select students.sname,sc.courseid,sc.grade from students right join sc on students.sno =sc.studentsid;
- select students.sname,sc.courseid,sc.grade from students left join sc on students.sno =sc.studentsid;
复制表格里数据,创建新表
- create table xxx select sname from students;//把学生表里的名字复制到xxx表格中
- create table sss select students.sname,sc.courseid,sc.grade from students left join sc on students.sno =sc.studentsid;//把数据复制到sss表格中
显示属性
-
desc student;//显示学生表格的属性
增加,改名
add 列名 建表语句 [first | after 列名]
可以为表添加一列,如果没指定first或者after,则在列尾添加一列,否则在指定列添加新列
add primary key (列名)
为表添加一个主键,如果主键已经存在,则出现错误
add foreign key(列名) references 表名(列名)�为表添加一个外键
alter 列名 set default 默认值
可以更改指定列默认值
change 旧列名 新列名 <建表语句> [first | after 列名]
可以更改列类型和列名称,如果原列的名字和新列的名字相同
modify 列名 <建表语句> [first | after 列名]
和change的作用相同
drop 列名 //可以删除一列
drop primary key //可以删除主键
engine 类型名 //可以改变表类型
rename as 新表名 //可以将表名更改
举例1:
向people表中添加字段address2,类型为varchar,最大长度为100
alter table people add address2 varchar(100);
**举例2: **
将people表中的name列默认值改为100:
alter table people alter name set default 100;
举例3:
向student表增加“入学时间”列,其数据类型为日期型。
alter table student add scome date;
注:无论基本表中原来是否已有数据,新增加的列一律为空值。
举例4:
将年龄的数据类型改为半字长整数。
alter table student modify sage smallint;
注:修改原有的列定义有可能会破坏已有数据
- alter table student add sgrade int after name;//在学生表中name列后面加sgrade列
-
alter table student change name sname varchar(20) after sid;//把学生表中的name名字改成sname
用C++打开mysql里的表格
#include<mysql/mysql.h>
#include<iostream>
#include<string>
#include<stdlib.h>
using namespace std;
MYSQL *conn;
MYSQL_RES *res;
MYSQL_ROW row;
int main()
{
const char *server = "localhost";
const char *user = "root";
const char *password = "123";
const char *database = "test01";
conn =mysql_init(NULL);
if(!mysql_real_connect(conn,server,user,password,database,0,NULL,0))
{
cout<<"connect error "<<endl;
return 0;
}
mysql_set_character_set(conn,"utf8");
if(mysql_query(conn,"select * from students"))
{
cout<<"query error"<<endl;
return 0;
}
res=mysql_use_result(conn);
while ((row=mysql_fetch_row(res))!=NULL)
{
cout<<row[0]<<" "<<row[1]<<endl;
}
mysql_free_result(res);
mysql_close(conn);
return 0;
}